冒泡算法--算法

需求:请按照从小到大对列表 [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
 

最新文章

  1. Python碎碎念
  2. PHP 链接数据库1(连接数据库&简单的登录注册)
  3. cmd+lcx+nc+sc提权工具总结
  4. 捉虫记:SHGetSpecialFolderPath返回错误码为2
  5. SwfUpload及imgareaselect使用方法
  6. JavaScript属性中的offsetLeft、offsetWidth、clientWidth、scrollLeft、scrollWidth、innerWidth
  7. LCS最大公共子序列问题
  8. android-support-v7-appcompat
  9. 【Centos7】卸载OpenJDK
  10. tsc.exe 已退出 代码为 1
  11. 初学python之路-day09
  12. C#中判断DataReader是否为空的代码
  13. 你不知道的JS之作用域和闭包 附录
  14. 说一下syslog日志吧~~~
  15. Mxd文档更新比例尺
  16. (二 -3) 天猫精灵接入Home Assistant-自动发现Mqtt设备--灯系列
  17. python爬虫之Phantomjs安装和使用
  18. SpringSecurity实现用户名密码登录(Token)
  19. javaScript系列 [02]-javaScript对象探析
  20. django的权限认证:登录和退出。auth模块和@login_required装饰器

热门文章

  1. SRM 146 DIV1 800
  2. 316. Remove Duplicate Letters
  3. C# 导入EXCEL 报错外部表不是预期的格式错误 .
  4. S5PV210的电阻触摸屏&ADC控制器
  5. <一>Angular.js学习
  6. 使用Linux碎解一
  7. centos 6.5 查看、开启,关闭 端口
  8. 何为babel / gulp
  9. fiddler 配置
  10. @ModelAttribute 注解及 POJO入参过程