迭代和列表生成式

当我们使用for循环时,只要作用于一个可迭代对象,for循环就可以正常运行,而我们不太关心该对象究竟是list还是其他数据类型。

那么,如何判断一个对象是可迭代对象呢?方法是通过collections模块的Iterable类型判断:

from collections.abc import Iterable
d = {'a': 1, 'b': 2, 'c': 3}
print(isinstance(d, Iterable))

如果要对list实现类似Java那样的下标循环怎么办?Python内置的enumerate函数可以把一个list变成索引-元素对,这样就可以在for循环中同时迭代索引和元素本身

for i, k in enumerate(d):
    print(i,k)
0 a
1 b
2 c

列表生成式

[x * x for x in range(1, 11) if x % 2 == 0]

还可以使用两层循环,可以生成全排列

>>>[m + n for m in 'ABC' for n in 'XYZ']
['AX', 'AY', 'AZ', 'BX', 'BY', 'BZ', 'CX', 'CY', 'CZ']

列表生成式也可以使用两个变量来生成list

>>> d = {'x': 'A', 'y': 'B', 'z': 'C' }
>>> [k + '=' + v for k, v in d.items()]
['y=B', 'x=A', 'z=C']

在一个列表生成式中,for前面的if ... else是表达式,而for后面的if是过滤条件,不能带else

>>> [x if x % 2 == 0 else -x for x in range(1, 11)]
[-1, 2, -3, 4, -5, 6, -7, 8, -9, 10]

 

posted on 2020-12-01 11:50  starock  阅读(76)  评论(0编辑  收藏  举报