列表生成式&三元表达式

列表生成式: 用于生成一个新的列表,是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

 

猜你喜欢

转载自www.cnblogs.com/hwtfamily/p/8981532.html