def_chen_list(): # 列表生成式 L = [x * x for x inrange(1, 11)] print(L)
if __name__ == "__main__": _chen_list()
输出结果和上面的常规方法输出的结果一样:
1 2
输出结果为: [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
2.列表生成式 + if
跟在for后面的if是一个筛选条件,不能带else
1 2 3 4 5 6 7
def_chen_list(): L = [x * x for x inrange(1, 11) if x % 2 == 0] print(L)
if __name__ == "__main__": _chen_list()
1 2
输出结果为: [4, 16, 36, 64, 100]
相当于:
1 2 3 4 5 6 7 8 9 10 11
def_chen_(): L = [] for x inrange(1, 11): if x % 2 == 0: x_all = x * x L.append(x_all) print(L)
if __name__ == "__main__": _chen_()
3.列表生成式 + if ….else
if写在for前面必须加else,因为for前面的部分是一个表达式,它必须根据x计算出一个结果
如下这条表达式,x if x % 2 == 0,它无法根据x计算出结果,因为缺少else,必须加上else
1 2 3 4 5 6 7
def_ruguo(): L = [x if x % 2 == 0else -x for x inrange(1, 11)] print(L) if __name__ == "__main__": _ruguo()
1 2
输出结果为: [-1, 2, -3, 4, -5, 6, -7, 8, -9, 10]
这个的效果就相当于:
1 2 3 4 5 6 7 8 9 10 11 12 13
defru_guo(): L = [] for x inrange(1, 11): if x % 2 == 0: x1 = x else: x1 = -x L.append(x1) print(L) if __name__ == "__main__": ru_guo()
4.两层循环,生成全排列
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
defpai_lie(): L = [m + n for m in'ABC'for n in'XYZ'] W = [m + n for m in'123'for n in'456'] print(W) # pai_lie()函数等价于qing_xi(),但是并不是完全等价,pai_lie这个函数输出来以后是一个列表,如下输出结果4.1所示 #而qing_xi函数输出来的是一个一个单独的,如下图输出结果4.2所示
defqing_xi(): for m in'123': for n in'456': print(m + n)
def_li_ti(): L = [x * x for x inrange(1, 11) if x % 2 == 0] L1 = ['Hello', 'World', 18, 'Apple', None] L2 = [x.lower() for x in L1 ifisinstance(x, str) isTrue] print(L2)
if __name__ == "__main__": _li_ti()
另一种形式为:
1 2 3 4 5 6 7 8 9 10 11
defis_instance(): L = [] L1 = ['Hello', 'World', 18, 'Apple', None] for s in L1: ifisinstance(s, str) isTrue: L.append(s.lower()) print(L)