概念

列表推导式(list comprehension,list comps)是利用其他列表创建新列表的一种方法。

本质上可以把列表推导式理解成一种集合了变换和筛选功能的函数,通过这个函数把一个列表转换成另一个列表。注意是另一个新列表,原列表保持不变。

基本用法

构建一个简单的列表

如果我们需要列表数据时从0-9可以怎么实现呢?

>>> lst = list(range(10))
>>> lst
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

而使用列表推导式呢?

>>> lst = [n for n in range(10)]
>>> lst
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

看起来列表推导式没有优势啊? 如果我们需要的列表是1-100所有的数的平方呢?

>>> lst = [n**2 for n in range(1,11)]
>>> lst
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

甚至还可以再加上条件哦 比如要求 能整除2的数的平方放入到列表中

>>> lst = [n**2 for n in range(1,11) if n % 2 == 0]
>>> lst
[4, 16, 36, 64, 100]

甚至还可以这样

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

这很快就构造出了 横坐标加纵坐标之和能够整除2的坐标对构成的列表

python中还有字典推导式、集合推导式等,与列表推导式使用方式大致相同。列表推导式的使用非常广泛,从实际使用经验来看,列表推导式使用的频率是非常高的。而对于列表推导式的多层for循环,尤其是3层以上的或带复杂筛选条件的,牺牲了较多的可读性,直接用多个普通for循环方式实现就可以了,毕竟方便的实现功能是第一位的,多几行代码就多几行吧。

results matching ""

    No results matching ""