Python学习笔记 04
冒泡算法
练习:<br>有如下列表: [13, 22, 6, 99, 11] 请按照一下规则计算: 13 和 22 比较,将大的值放在右侧,即:[13, 22, 6, 99, 11] 22 和 6 比较,将大的值放在右侧,即:[13, 6, 22, 99, 11] 22 和 99 比较,将大的值放在右侧,即:[13, 6, 22, 99, 11] 99 和 42 比较,将大的值放在右侧,即:[13, 6, 22, 11, 99,] 13 和 6 比较,将大的值放在右侧,即:[6, 13, 22, 11, 99,]
程序:
#!/usr/bin/env python # _*_ coding:utf-8 _*_ __author__ = 'wang' #已知列表长度的方法 li = [11,2,34,21,5] print len(li) print '>',li for m in range(4): num1 = li[m] #获取第m个值 num2 = li[m+1] #获取第m+1个值 if num1 > num2: #将较大的值放在右侧 temp = li[m] li[m] = li[m+1] li[m+1] = temp print '->',li for m in range(3): num1 = li[m] num2 = li[m+1] if num1 > num2: temp = li[m] li[m] = li[m+1] li[m+1] = temp print '-->',li for m in range(2): num1 = li[m] num2 = li[m+1] if num1 > num2: temp = li[m] li[m] = li[m+1] li[m+1] = temp print '--->',li for m in range(1): num1 = li[m] num2 = li[m+1] if num1 > num2: temp = li[m] li[m] = li[m+1] li[m+1] = temp print '---->',li #不知道列表长度的方法 for n in range(1,len(li)): #1-4 1,2,3,4 #print n for m in range(len(li)-n): #4-1 4,3,2,1 num1 = li[m] num2 = li[m+1] if num1 > num2: temp = li[m] li[m] = li[m+1] li[m+1] = temp print li
lambda表达式
条件运算时,对于简单的 if else 语句,可以使用三元运算来表示,即:
# 普通条件语句 if 1 == 1: name = 'aresi' else: name = 'wangxin' # 三元运算 name = 'ares' if 1 == 1 else 'wangxin'
对于简单的函数,也存在一种简便的表示方式:lambda表达式,lambda存在意义就是对简单函数的简洁表示
# ###################### 普通函数 ###################### # 定义函数(普通方式) def func(arg): return arg + 1 # 执行函数 result = func(123) # ###################### lambda ###################### # 定义函数(lambda表达式) my_lambda = lambda arg : arg + 1 # 执行函数 result = my_lambda(123)
示例:
def func1(arg): return arg + 1 result = func1(100) print result func2 = lambda a: a + 1 result =func2(1000) print result func3 = lambda a,b: a + b result =func3(1000,123) print result #运行结果 101 1001 1123
内置函数
map函数:遍历序列,对序列中每个元素进行操作,最终获取新的序列。

每个元素增加10:
函数方式: li = [11,22,33] def func1(arg): return arg + 10 new_list = map(func1,li) print new_list map方式: map实现 new_list = [] for item in li: new_item = item + 10 new_list.append(new_item) print new_list 输出结果: [21, 32, 43] [21, 32, 43]
两列表元素相加:
l1 = [11,22,33] l2 = [1,2,3] def func2(a1,a2): return a1 + a2 new_list1 = map(func2,l1,l2) print new_list1 print map(lambda a1,a2:a1+a2,l1,l2) 输出结果: [12, 24, 36] [12, 24, 36]
filter函数:对于序列中的元素进行筛选,最终获取符合条件的序列

获取列表中大于3的元素:
li = [11,22,3,44,0,False,""] print filter(None,li) l1 = [11,22,33,44] print filter(lambda a:a>33,l1) 输出结果: [11, 22, 3, 44] [44]
reduce函数:对于序列内所有元素进行累计操作


获取系列中所有元素的和:
li = [1,2,3,4,5,6,7,8] result = reduce(lambda arg1,arg2:arg1+arg2,li) print result # reduce的第一个参数,函数必须要有两个参数 # reduce的第二个参数,要循环的序列 # reduce的第三个参数,初始值 输出结果: 36
yield生成器:
range 和 xrange 的区别:range会在内存中创建所有指定的数字,而xrange不会立即创建,只有在迭代循环时,才去创建每个数组。
>>> print range(10) [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] >>> print xrange(10) xrange(10)
自定义生成器:
def mrange(arg): seed = 0 while True: seed = seed + 1 if seed > arg: return else: yield seed for i in mrange(10): print i
文件操作的 read 和 xreadlinex :
read会读取所有内容到内存
xreadlines则只有在循环迭代时才获取

浙公网安备 33010602011771号