python基础第四天(1)
2024-08-25 23:41:43
冒泡算法--算法
需求:请按照从小到大对列表 [13, 22, 6, 99, 11] 进行排序
思路:相邻两个值进行比较,将较大的值放在右侧,依次比较!
第一步
li = [13, 22, 6, 99, 11]
for m in range(4): # 等价于 #for m in range(len(li)-1):
if li[m]> li[m+1]:
temp = li[m+1]
li[m+1] = li[m]
li[m] = temp
第二步
li = [13, 22, 6, 99, 11] for m in range(4): # 等价于 #for m in range(len(li)-1):
if li[m]> li[m+1]:
temp = li[m+1]
li[m+1] = li[m]
li[m] = temp for m in range(3): # 等价于 #for m in range(len(li)-2):
if li[m]> li[m+1]:
temp = li[m+1]
li[m+1] = li[m]
li[m] = temp for m in range(2): # 等价于 #for m in range(len(li)-3):
if li[m]> li[m+1]:
temp = li[m+1]
li[m+1] = li[m]
li[m] = temp for m in range(1): # 等价于 #for m in range(len(li)-4):
if li[m]> li[m+1]:
temp = li[m+1]
li[m+1] = li[m]
li[m] = temp
print li
第三步:最终形式是这样的
li = [13, 22, 6, 99, 11]
for i in range(1,len(li)):
for m in range(len(li)-i): #4,3,2,1
if li[m] > li[m+1]:
#将较大的值放到右侧
temp = li[m+1]
li[m+1] = li[m]
li[m] = temp
lambda表达式
学习条件运算时,对于简单的 if else 语句,可以使用三元运算来表示,即:
# 普通条件语句
if 1 == 1:
name = 'wupeiqi'
else:
name = 'alex' # 三元运算
name = 'wupeiqi' if 1 == 1 else 'alex'
对于简单的函数,也存在一种简便的表示方式,即:lambda表达式
# ###################### 普通函数 ######################
# 定义函数(普通方式)
def func(arg):
return arg + 1 # 执行函数
result = func(123) # ###################### lambda ###################### # 定义函数(lambda表达式)
my_lambda = lambda arg : arg + 1 #自动 return # 执行函数
result = my_lambda(123)
my_lambda = lambda a,b: a + b #接收多参数
#处理简单逻辑
#自动return
lambda存在意义就是对简单函数的简洁表示(只能用于简便的函数)
内置函数 二
一、map
遍历序列,对序列中每个元素进行操作,最终获取新的序列
每个元素增加100
li = [11, 22, 33]
new_list = map(lambda a: a + 100, li)
两个列表对应元素相加
li = [11, 22, 33]
sl = [1, 2, 3]
new_list = map(lambda a, b: a + b, li, sl)
第一个参数应该是一个函数。
二、filter
对于序列中的元素进行筛选,最终获取符合条件的序列
获取列表中大于12的所有元素集合
li = [11, 22, 33]
new_list = filter(lambda arg: arg > 22, li)
#filter第一个参数为空,将获取原来序列,并且去除false的布尔值。也就是取值布尔值为真的。
三、reduce
对于序列内所有元素进行累计操作
获取序列所有元素的和
li = [11, 22, 33]
result = reduce(lambda arg1, arg2: arg1 + arg2, li)
# reduce的第一个参数,函数必须要有两个参数
# reduce的第二个参数,要循环的序列
# reduce的第三个参数,初始值
yield生成器
记住上一次的操作,下次再执行时,继续执行(会暂时冻结这个函数)可以做数据库的链接池。
例如:
def func1():
return 1
#return的生命周期就已经结束了
def func2():
yield 1
yield 2
yield 3
for i in func2():
print i
#他会返回3次。yield生命周期在延续。
>>> print range(10)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> print xrange(10)
xrange(10)
如上代码所示,range会在内存中创建所有指定的数字,而xrange不会立即创建,只有在迭代循环时,才去创建每个数组。
####自定义生成器nrange
def nrange(num):
temp = -1
while True:
temp = temp + 1
if temp >= num:
return
else:
yield temp
for i in nrange(4):
print i
2、文件操作的 read 和 xreadlinex 的的区别
read会读取所有内容到内存
xreadlines则只有在循环迭代时才获取
#基于next自定义生成器NReadlines
def NReadlines():
with open('log','r') as f:
while True:
line = f.next()
if line:
yield line
else:
return for i in NReadlines():
print i
###基于seek和tell自定义生成器NReadlines
def NReadlines():
with open('log','r') as f:
seek = 0
while True:
f.seek(seek)
data = f.readline()
if data:
seek = f.tell()
yield data
else:
return for item in NReadlines():
print item
最新文章
- Python碎碎念
- PHP 链接数据库1(连接数据库&;简单的登录注册)
- cmd+lcx+nc+sc提权工具总结
- 捉虫记:SHGetSpecialFolderPath返回错误码为2
- SwfUpload及imgareaselect使用方法
- JavaScript属性中的offsetLeft、offsetWidth、clientWidth、scrollLeft、scrollWidth、innerWidth
- LCS最大公共子序列问题
- android-support-v7-appcompat
- 【Centos7】卸载OpenJDK
- tsc.exe 已退出 代码为 1
- 初学python之路-day09
- C#中判断DataReader是否为空的代码
- 你不知道的JS之作用域和闭包 附录
- 说一下syslog日志吧~~~
- Mxd文档更新比例尺
- (二 -3) 天猫精灵接入Home Assistant-自动发现Mqtt设备--灯系列
- python爬虫之Phantomjs安装和使用
- SpringSecurity实现用户名密码登录(Token)
- javaScript系列 [02]-javaScript对象探析
- django的权限认证:登录和退出。auth模块和@login_required装饰器