列表生成式

一、列表生成式

列表生成试List Comprehensions,是Python内置的非常简单却强大的可以用了创建list的生成试。

1 为何要使用列表生成试

举个例子,要生成list[1,2,3,4,5,6,7]可以用list(range(1,8)):

>>> list(range(1,8))
[1, 2, 3, 4, 5, 6, 7]

如果要生成[1x1,2x2…..10x10]怎么办,方法一是for循环

>>> for i in range(1,11):
list1.append(i*i)
>>> list1
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

循环太繁琐了,二使用列表生成试一行语句就可以搞定上边的list

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

2 列表生成试的一般格式

(1)遍历模式
[变量(加工后的变量) for 变量 in iterable] 遍历模式
如:list = [i for i in range(1,11)]

>>> list = [i for i in range(1,11)]
>>> list
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

(2)筛选模式
[变量(加工后的变量) for 变量 in iterable if 条件] 筛选模式
如:list2 = [i for i in range(1,31) if i % 3 == 0]

>>> list2 = [i for i in range(1,31) if i % 3 == 0]
>>> list2
[3, 6, 9, 12, 15, 18, 21, 24, 27, 30]

(3)三元模式(循环模式)
# 构建一个列表:列表里面的元素是1~20,但是能被3整除元素替换成*。

ret = '*' if 3>2 else 1
print(ret)
print(['*' if i % 3 == 0 else i for i in range(1,21)])

结果为:

[1, 2, '*', 4, 5, '*', 7, 8, '*', 10, 11, '*', 13, 14, '*', 16, 17, '*', 19, 20]

3 列表生成式特点:

优点:一行搞定,节省代码行数,高逼格。
缺点:
  1,不能用debug模式。
  2,列表推导式有毒,任何列表都可以通过常规构建去构建,复杂的列表不能通过列表推导式。

二、生成器表达式

与列表推导式几乎一模一样, 就是[] 换成 ()

l1 = ['python%s' %i for i in range(1,26)]
gentor = ('python%s' %i for i in range(1,26))
print(gentor)
for i in gentor:
    print(i)
结果为:
<generator object <genexpr> at 0x0000000001E12F10>
python1
python2
python3
....
python25

三、字典推导式, 集合推导式

mcase = {'a': 10, 'b': 34, 'c': 20, 'd': 15}
print({value:key for key,value in mcase.items()})
结果为:{10: 'a', 34: 'b', 20: 'c', 15: 'd'}

 

posted @ 2019-01-03 21:08  Sunzz  阅读(111)  评论(0)    收藏  举报