python|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)


  • [i for i in range(k) if condition]:此时if起条件判断作用,满足条件的,将被返回成为最终生成的列表的一员。
  • [i if condition else exp for exp]:此时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)------------------------------------------------------------ 结果:['0==0', '0==1', '0==2', '0==3', '0==4', '1==0', '1==1', '1==2', '1==3', '1==4', '2==0', '2==1', '2==2', '2==3', '2==4', '3==0', '3==1', '3==2', '3==3', '3==4', '4==0', '4==1', '4==2', '4==3', '4==4']

[['{}=={}'.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)-------------------------------------------------------------- 结果:[ ['0==0', '1==0', '2==0', '3==0', '4==0'], ['0==1', '1==1', '2==1', '3==1', '4==1'], ['0==2', '1==2', '2==2', '3==2', '4==2'], ['0==3', '1==3', '2==3', '3==3', '4==3'], ['0==4', '1==4', '2==4', '3==4', '4==4'] ]

注意上面两个解析式的区别,它们在进入循环时的顺序不一样。
【python|python 列表解析式】来看两个练习题:
#在屏幕上打印九九乘法表 [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)]))----------------------------------------------------------------------------------------- 1*1=1 2*1=22*2=4 3*1=33*2=63*3=9 4*1=44*2=84*3=124*4=16 5*1=55*2=105*3=155*4=205*5=25 6*1=66*2=126*3=186*4=246*5=306*6=36 7*1=77*2=147*3=217*4=287*5=357*6=427*7=49 8*1=88*2=168*3=248*4=328*5=408*6=488*7=568*8=64 9*1=99*2=189*3=279*4=369*5=459*6=549*7=639*8=729*9=81

生成数字和随机字母组成的id号: import random ['{:04}.{}'.format(i,''.join(random.choices(bytes(range(97,123)).decode(),k=10))) for i in range(1,11)]------------------------------------------------------------------------------------------- ['0001.lfykqlniww', '0002.jjmxavbxsw', '0003.geutsojqnh', '0004.tenatpjmqq', '0005.bruubbhpgw', '0006.sebvteldqe', '0007.dpuplfmsjm', '0008.sxmiwcyxqe', '0009.rdanbpslpn', '0010.jzeyqmffmj']



    推荐阅读