一. 切片
切片操作和java中的subList类似,就是获取一个子列表
比如L=['zhangsan','lisi','wangwu'] 那么L[0, 2]表示从索引0开始取,直到索引2(不含2), 正好2个元素。如果第一个索引为0, 还可以省略.
下面我们创建一个0-99的数列: L = range(100)
1. 获取前10个数: L[:10]
2. 获取后10个数: L[-10:] # 倒数第一个元素的索引是-1
3. 获取前11-20个数: L[10:20]
4. 获取前10个数,每两个取一个: L[:10:2]
5. 所有数中,每5个取一个:L[: : 5]
tuple, 字符串‘xxx’ 或 Unicode字符串u'xxx'也可以使用切片操作
二. 迭代
python的for循环不仅可以用在list或tuple上,还可以作用在其他可迭代对象上
1. 迭代dict:
d = {'a': 1, 'b': 2, 'c': 3} for key in d: print keydict的存储不是按照list的方式顺序排列,所以,迭代出的结果顺序很可能不一样。
默认情况下,dict迭代的是key。如果要迭代value,可以用for value in d.itervalues(), 如果要同时迭代key和value,可以用for k, v in d.itervalues()
2. 判断对象是否可迭代:(通过collections模块的iterable类型判断)
from collections import Iterable print isinstance('abc', Iterable) # str是否可迭代 (True) print isinstance([1,2,3], Iterable) # list是否可迭代 (True) print isinstance(123, Iterable) # 整数是否可迭代 (False)3. 迭代索引和元素本身:(通过enumerate函数把list变成索引-元素对)
>>> for i, value in enumerate(['A', 'B', 'C']): ... print i, value ... 0 A 1 B 2 C
三. 列表生成式
1. 生成列表
>>> [x * x for x in range(1, 11)] [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]2. 带条件的列表生成式:(筛选出仅偶数的平方)
>>> [x * x for x in range(1, 11) if x % 2 == 0] [4, 16, 36, 64, 100]3. 双层循环生成全排列:
>>> [m + n for m in 'ABC' for n in 'XYZ'] ['AX', 'AY', 'AZ', 'BX', 'BY', 'BZ', 'CX', 'CY', 'CZ']4. 多个变量的列表生成式
>>> d = {'x': 'A', 'y': 'B', 'z': 'C' } >>> for k, v in d.iteritems(): ... print k, '=', v ... y = B x = A z = C
四. 生成器
list不是一次性生成,而是在循环的过程中不断推算出后续的元素,这种一边循环一边计算的机制称为生成器。
L = [x * x for x in range(10)] # list - 中括号 g = (x * x for x in range(10)) # generator - 小括号
定义generator的另一种方法:
如果一个函数定义中包含yield关键字,那么这个函数就不再是一个普通函数,而是一个generator
generator函数在每次调用next()的时候执行,遇到yield语句返回,再次执行时从上次返回的yield语句处继续执行。
如:定义一个generator,依次返回数字1, 3, 5
def odd(): print 'step 1' yield 1 print 'step 2' yield 3 print 'step 3' yield 5 o = odd() print o.next() # step1 1 print o.next() # step2 2 print o.next() # step3 3