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']
      ]

注意上面两个解析式的区别,它们在进入循环时的顺序不一样。

来看两个练习题:

#在屏幕上打印九九乘法表
[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=2  2*2=4  
3*1=3  3*2=6   3*3=9  
4*1=4  4*2=8   4*3=12  4*4=16 
5*1=5  5*2=10  5*3=15  5*4=20  5*5=25 
6*1=6  6*2=12  6*3=18  6*4=24  6*5=30  6*6=36 
7*1=7  7*2=14  7*3=21  7*4=28  7*5=35  7*6=42  7*7=49 
8*1=8  8*2=16  8*3=24  8*4=32  8*5=40  8*6=48  8*7=56  8*8=64 
9*1=9  9*2=18  9*3=27  9*4=36  9*5=45  9*6=54  9*7=63  9*8=72  9*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']

 

 

你可能感兴趣的:(python,学习笔记)