python基础二
高级特性
切片 取list或tuple的部分元素
L[0:3] 取L中前三个元素(L[0] L[1] L[2]) 当第一个索引是0时可以省略 L[:3]
倒数切片 L[-3:] >> L[-3] L[-2] L[-1]
L[0:10:2] 前十个数,每两个取一个
L[ : : 2]
L[:] 原样复制一个list/tuple
对字符串也可以进行切片 str = "abcd" str[::2] >> ac
迭代
list tuple
dict for key in dict for v in dict.values() for k,v in dict.items()
str for ch in "abc"
判断一个对象是否可迭代,通过collections模块的Iterable
from collections import Iterable
isinstance(obj,Iterable)
如果想要迭代出下标,通过内置的enumerate函数
for i,value in enumerate(['a','b','c'])
print(i,value)
>> 0 a 1 b 2 c
当有多个变量需要迭代时,可以使用zip()封装,zip会将对应元素封装成tuple,返回list
a=[1,2,3]
b=[4,5,6]
for i,j in zip(a,b):
print i, j
>> 1 4 2 5 3 6
列表生成式 List Comprehensions
list(rang(1,10)) >> [1,2,3,4...7,8,9]
[x*x for x in range(1,10)] >> [1*1,2*2,3*3,...,9*9]
[x*x for x in range(1,10) if x%2==0]
[m+n for m in "abc" for n in "xyz"] 两层循环
[d for d in os.listdir('.')]
生成器 generator
g = (x*x for x in range(10))
next(g) >> 0
next(g) >> 1
next(g) >> 4
当没有更多元素时,next(g) >> StopIteration
for ele in g:
print ele
def fib(max):
n,a,b = 0,0,1
while n<max:
yield b
a,b = b,a+b
n = n+1
return
每次调用fib,暂停在yield语句处
迭代器 Iterator
可以直接作用于for循环的数据类型有:
集合数据类型:list tuple dict set str等
generator 生成器和带yield的generator function
可以被next()函数调用并不断返回下一个值的对象称为迭代器:Iterator
from collections import Iterator
isinstance(obj,Iterator)
对于list tuple str等虽然是Iterable,但是不是Iterator,可以使用iter()函数