列表生成式: 用于生成一个新的列表,是Python内置的一种极其强大的生成list的表达式。
一、语法格式:[exp for iter_var in iterable]
工作过程:
(1)迭代iterable中的每个元素;
(2)每次迭代都先把结果赋值给iter_var,然后通过exp得到一个新的计算值;
(3)最后把所有通过exp得到的计算值以一个新列表的形式返回。
例如:
L=[i for i in range(10)] print(L)#[0, 1, 2, 3, 4, 5, 6, 7, 8, 9] R=[] for a in range(10): R.append(a) print(R)#[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
二、嵌套if语句:[exp for iter_var in iterable if_exp]
工作过程:
(1)迭代iterable中的每个元素,每次迭代都先判断if_exp表达式结果为真,如果为真则进行下一步,如果为假则进行下一次迭代;
(2)把迭代结果赋值给iter_var,然后通过exp得到一个新的计算值;
(3)最后把所有通过exp得到的计算值以一个新列表的形式返回。
res=[x for x in range(1,10) if x%2==0] print(res)#[2, 4, 6, 8] res=[x*x for x in range(1,10) if x%2==0] print(res)#[4, 16, 36, 64]
三、循环嵌套语法格式:[exp for iter_var_A in iterable_A for iter_var_B in iterable_B]
工作过程:每迭代iterable_A中的一个元素,就把ierable_B中的所有元素都迭代一遍。
res= [(x, y) for x in range(3) for y in range(4)] print(res)#[(0, 0), (0, 1), (0, 2), (0, 3), (1, 0), (1, 1), (1, 2), (1, 3), (2, 0), (2, 1), (2, 2), (2, 3)] res=[ x+y for x in range(3) for y in range(4)] print(res)#[0, 1, 2, 3, 1, 2, 3, 4, 2, 3, 4, 5]
四、循环嵌套加判断
res=[m + n for m in range(1,10) for n in range(1,5) if m%2==0] print(res)#[3, 4, 5, 6, 5, 6, 7, 8, 7, 8, 9, 10, 9, 10, 11, 12]
备注:[]与()的区别
l1 = [ i for i in range(1,20,2) ] #生成100以内的奇数,以空间换时间 print(l1) #[1, 3, 5, 7, 9, 11, 13, 15, 17, 19] l2 = ( i for i in range(1,20,2) ) #生成100以内的奇数 # print(l2) #<generator object <genexpr> at 0x0000000002255410> #外面是小括号的话,它就不是一个list了,它是一个生成器, #生成器比list要节省内存,它是每次循环的时候,会根据规则计算一个元素,放到内存里面 #list它是把所有的元素都放在内存里面的
小练习:
#res = ['HWt' , 'Python' ,456, 'Random' , 'BEST' , 123] ,将list中得大写字符转为小写: res = ['HWt' , 'Python' ,456, 'Random' , 'BEST' , 123] print([s.lower() if isinstance(s , str) else s for s in res ] )#['hwt', 'python', 456, 'random', 'best', 123]
三元表达式:if...else 三元表达式: 可以简化分支判断语句,如 x = y.lower() if isinstance(y, str) else y
# c = a if a > b else b # 如果a大于b的话,c=a,否则c = b ,如果不用三元运算符的话,就得下面这么写 if a > b: c = a else: c = b c = a if a > b else b #三元表达式
Python之列表生成式、生成器、可迭代对象与迭代器:https://www.cnblogs.com/yyds/p/6281453.html