Python 列表生成式

什么叫列表生成式:Python内置的可生成list的表达式

例如:要生成一个list[1-10],可以用range()

 range(1,11)
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

有关range()解释可以百度下,以及需留意(1, 11)只会显示1-10的数字。

那如果要生成(1*1, 2*2, 3*3 ... 10*10)要如何解决?

方法一:利用循环

 L = []
 for x in range(1, 11):
...     L.append(x*x)
...
 L
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

方法二:列表生成式

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

列表生成式的书写格式:[ x * x for x in range(1, 11)]

[process(x) for x in L if should_keep(x)]

上面为原型

1、将需要生成的内容放入x * x

2、后面跟上for循环起来

 

for循环后面还能添加if判断,例如:筛选出偶数的平方

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

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

 [m + n for m in 'ABCD' for n in 'XYZ']
['AX', 'AY', 'AZ', 'BX', 'BY', 'BZ', 'CX', 'CY', 'CZ', 'DX', 'DY', 'DZ']

for循环可以同时两个或者多个变量,比如dict和iteritems()可以同时迭代key和value:

 d = {'x':'A', 'y':'B', 'z':'C'}
 for k, v in d.iteritems():
...     print k, '=', v
...
y = B
x = A
z = C

也可以使用两个变量生成List

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

思考题:

将以下List的字符串改小写

L = ['Hello', 'World', 18, 'Apple', None]

思路:

1、有字符串,有数字,如果直接用s.lower()进行更改会出现错误,因为整数非字符串类型

2、可以使用内建的isinstance函数判断一个变量是否为字符串

3、要根据这个原型进行调整:[process(x) for x in L if should_keep(x)]

4、process(x) 等于 s.lower() if isinstance(s, str) else s ;后面按正常走:(**不懂可以看备注1)

 [s.lower() if isinstance(s,str) else s for s in L]

得出的结果:

 [s.lower() if isinstance(s,str) else s for s in L]
'hello', 'world', 18, 'apple', None]

试错过程:

1、没有出现整数

 [L.lower() for L in L if isinstance(L, str)]
['hello', 'world', 'apple']

 

 

备注1、为什么不能用

 [s.lower() for s in L if isinstance(s, str) else s for s in L]

因为列表生成式后面只能有if不能有else,因为这个if是说要不要保留x",加上else就没办法解释逻辑。

 

总结:列表生成式的原型:[process(x) for x in L if should_keep(x)]要记得,相关代码直接用这个往里面搬

 

转载于:https://www.cnblogs.com/LevenLau/p/6701720.html

最新回复(0)
/jishuembT8NXJa5aCgCWgyeq5Eb_2BUAB29aXvhLBoTqnl1gbU_3D8