普通写法
# 生成一个数字序列
L = []
def my_func(x):
return 2*x
for i in range(5):
L.append(my_func(i))
L
#输出[0,2,4,6,8]
列表推导式
可以利用列表推导式进行写法上的简化:[* for i in *]。其中,第一个`*`为映射函数,其输入为后面`i`指代的内容,第二个`*`表示迭代的对象,比如range(5)。
M=[2*i for i in range(5)]
#输出[0,2,4,6,8]
这种方式在别的内置数组类型中也适用,此时这种方式叫做生成器表达式
tuple(2*i for i in range(5))
#输出[0,2,4,6,8]
import array
array.array('I',(2*i for i in range(5)))
#输出为:array('I', [0, 2, 4, 6, 8])
列表表达式还支持多层嵌套,如下面的例子中第一个`for`为外层循环,第二个为内层循环:
[m+'_'+n for m in ['a', 'b'] for n in ['c', 'd']]
#输出:['a_c', 'a_d', 'b_c', 'b_d']
三目运算符
普通写法:
a, b = 'cat', 'dog'
condition = 2 > 1 # 此时为True
if condition:
value = a
else:
value = b
value
#输出:'cat'
三目运算符写法:
value = 'cat' if 2>1 else 'dog'
value
#输出:'cat'
列表生成式使用三目运算符
# 截断列表中超过5的元素,即超过5的用5代替,小于5的保留原来的值
L = [1, 2, 3, 4, 5, 6, 7]
L = [i if i <= 5 else 5 for i in L]
L
#输出:[1, 2, 3, 4, 5, 5, 5]