1.列表生成式
生成有一定规律的列表可以使用列表生成式
如生成1到10的列表L=[x for x in range(1,11)]
生成1到10之中偶数的列表L=[x for x in range(1,11) if x%2==0]
生成1到10之中数的平方列表L=[x*x for x in range(1,11)]
多重循环:L=[m+n for m in range(1,11) for n in range(11,21)]
L=['ASUS','Dell','Leon'] print([s.lower() for s in L]) L1 = ['Hello', 'World', 18, 'Apple', None] L2=[s.lower() if isinstance(s,str) else s for s in L1 ] print(L2) L3=[s.lower() for s in L1 if isinstance(s,str)] print(L3)isinstance(x,str)可以用来判断是否为字符串,是则返回True,不是返回False.这是一个内置函数(from collections import Iterable可以判断是否可以迭代)
留意L2的if else语句,类似于C语言的三目运算 a if ... else b for x in L 其中a,b为x的不同形式
2.生成器
<法一>将列表生成式的[]换为(),如g=(x*x for x in range(1,11))
<法二>
待续,此处不是很懂
s = (x * x for x in range(5))
print(s)
for x in s:
print(x)
def fib(max):
n, a, b = 0, 0, 1
while n < max:
yield b
a, b = b, a + b
n = n + 1
return 'done'
f = fib(10)
print('fib(10):', f)
for x in f:
print(x)
# call generator manually:
g = fib(5)
while 1:
try:
x = next(g)
print('g:', x)
except StopIteration as e:
print('Generator return value:', e.value)
break
3.迭代器
list,tuple,dict,str,generator都可以与for循环连用,成为可迭代,Iterable
而如果还能够使用next()返回下一个对象,则称为迭代器,generator是一种迭代器,称为Iterator.迭代器无法预先知道序列长度, 可以表示无穷长的序列, 例如全体自然数. 而list,tuple,dict,str不行
判断函数:
from collections import Iterable print(isinstance([],Iterable)) print(isinstance((),Iterable)) print(isinstance({},Iterable)) print(isinstance((x*x for x in range(1,11)),Iterable)) from collections import Iterator print(isinstance([],Iterator)) print(isinstance((),Iterator)) print(isinstance({},Iterator)) print(isinstance((x*x for x in range(1,11)),Iterator))True
True
True
True
False
False
False
True
from collections import Iterable, Iterator def g(): yield 1 yield 2 yield 3 print('Iterable? [1, 2, 3]:', isinstance([1, 2, 3], Iterable)) print('Iterable? \'abc\':', isinstance('abc', Iterable)) print('Iterable? 123:', isinstance(123, Iterable)) print('Iterable? g():', isinstance(g(), Iterable)) print('Iterator? [1, 2, 3]:', isinstance([1, 2, 3], Iterator)) print('Iterator? iter([1, 2, 3]):', isinstance(iter([1, 2, 3]), Iterator)) print('Iterator? \'abc\':', isinstance('abc', Iterator)) print('Iterator? 123:', isinstance(123, Iterator)) print('Iterator? g():', isinstance(g(), Iterator)) # iter list: print('for x in [1, 2, 3, 4, 5]:') for x in [1, 2, 3, 4, 5]: print(x) print('for x in iter([1, 2, 3, 4, 5]):') for x in iter([1, 2, 3, 4, 5]): print(x) print('next():') it = iter([1, 2, 3, 4, 5]) print(next(it)) print(next(it)) print(next(it)) print(next(it)) print(next(it)) d = {'a': 1, 'b': 2, 'c': 3} # iter each key: print('iter key:', d) for k in d.keys(): print('key:', k) # iter each value: print('iter value:', d) for v in d.values(): print('value:', v) # iter both key and value: print('iter item:', d) for k, v in d.items(): print('item:', k, v) # iter list with index: print('iter enumerate([\'A\', \'B\', \'C\']') for i, value in enumerate(['A', 'B', 'C']): print(i, value) # iter complex list: print('iter [(1, 1), (2, 4), (3, 9)]:') for x, y in [(1, 1), (2, 4), (3, 9)]: print(x, y)