python 列表解析式
列表解析是Python迭代机制的一种应用,常用于实现创建新的列表。 列表解析式简化了代码,使代码的可读性增强;编译器在内部作了优化,不会因为简写而影响效率,反而提高了效率。
列表解析式是将一个列表转换成另一个列表的工具。在转换过程中,可以指定元素必须符合一定的条件,才能添加至新的列表中,这样每个元素都可以按需要进行转换。
基本语法:[expression for iter_val in iterable]
生成一个列表,元素是1-9,返回这个列表元素自增1后平方的列表
[(i+1)**2 for i in range(10)] #对应的for循环实现: list1 = [] list2 =list(range(10)) for i in list2: list1.append((i+1)**2) print(list1)
[iter_val for iter_val in iterable if condition]:此时if起条件判断作用,满足条件的,将被返回成为最终生成的列表的一员。
[iiter_val if condition else exp for iter_val in iterable]:此时if...else被用来赋值,满足条件的i以及else被用来生成最终的列表。
print([i for i in range(10) if i%2 == 0]) #结果:[0, 2, 4, 6, 8] print([i if i ==0 else 100 for i in range(10)]) #结果 : [0, 100, 100, 100, 100, 100, 100, 100, 100, 100]
[expr for i in iterable1 for j in iterable2]
#以上表达式等价于: ret = [] for i in iterable1: for j in iterable2: ret.append(expr)
两个例子:
['{}=={}'.format(i,j) for i in range(5) for j in range(5)] #对应的for 循环实现 lst1 = [] for i in range(5): for j in range(5): lst1.append('{}=={}'.format(i,j)) print(lst1)
[['{}=={}'.format(i,j) for i in range(5)] for j in range(5)] #对应的for循环实现: lst1 = [] for j in range(5): lst2 = [] for i in range(5): lst2.append('{}=={}'.format(i,j)) lst1.append(lst2) print(lst1)
打印九九乘法表:
[print('{}*{}={:<{}}'.format(i,j,i*j,2 if j==1 else 3),end='\n' if i==j else ' ') for i in range(1,10) for j in range(1,i+1)] print('\n'.join([' '.join(['{}*{}={:<2}'.format(y,x,x*y) for y in range(1,x+1)]) for x in range(1,10)]))