列表生成式(List Comprehensions),顾名思义,即为生成列表的表达式。列表生成式是Python内置的高级特性,简单却功能强大,充分体现了Python的简洁美。
格式:
[列表形式 生成规则]
#即一个列表生成式由2个表达式组成
列表生成式(List Comprehensions)
生成规则只要符合Python的语法即可,所以非常灵活,大家可以举一反三,一次类推。
下面举几个例子供大家学习,能使用到什么水平要看个人积累了。
#生成从1到10的list
>>>[x for x in (range(1,11))] #等价于list(range(1,11))
>>>[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
#生成从1开始的平方数
>>> [x * x for x in range(1, 11)]
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
>>>
#使用两个变量生成list
>>> dict = {'a':1, 'b':2, 'c':3}
>>> [k + '=' + str(v) for k,v in dict.items()]
['a=1', 'b=2', 'c=3'] #注意结果是包含3个字符串的列表
#还可以在生成式和生成规则式中做一些符合语法的简单处理
>>> s = 'steve wang'
>>> [x.upper() for x in s if x != ' ']
['S', 'T', 'E', 'V', 'E', 'W', 'A', 'N', 'G']
需要注意的地方在于,[]里只能有2个表表达式,第一个表达式表示生成式的形式,第二个表达式表示生成规则,否则会报语法错误。
#可以使用双层for循环 因为双层for循环在Python中可以写成一个表达式
>>> [(a, b) for a in range(0,4) for b in range(0,4)]
[(0, 0), (0, 1), (0, 2), (0, 3), (1, 0), (1, 1), (1, 2), (1, 3), (2, 0), (2, 1), (2, 2), (2, 3), (3, 0), (3, 1), (3, 2), (3, 3)]
#这是一个数学上的全排列