零基础学Python:第八讲-列表推导式
第八讲
一、列表生成式
列表生成式即List Comprehensions,是一种Python内置,非常简单却强大,可以通过表达式推导来生成一个list列表的方式,又名列表推导式
例如,要生成list [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]可以用list(range(1, 11)):,
但是如果想生成[1 * 1, 2 * 2, 3 * 3, …, 10 * 10]呢
方法一:通过循环
lt=[]
a=[]
for i in range(1,11):
lt.append(f'{i}*{i}={i*i}')
print(lt)
其输出结果为:
方法二:使用列表推导式,一行代码即可代替循环生成上面的list:
即可以将上部分代码简化一下,把要生成的元素x * x放到前面 后面跟for循环,就可以把list创建出来,如下所示
简化前:
lt=[]
a=[]
for i in range(1,11):
lt.append(f'{i}*{i}={i*i}')
print(lt)
简化后:
lt=[f'{i}*{i}={i*i}' for i in range(1,11)]
print(lt)
其结果和上部分一样,即创建一个空列表,列表内的需要的内容放在最前面,后面跟上for循环语句。
其中for循环后面还可以加上if判断,例如仅将一定范围内的偶数筛选出来:
lt=[]
for i in range(1,11):
if i%2==0:
lt.append(i)
print(lt)
通过列表生成式:
lt=[i for i in range(1,11) if i%2==0]
print(lt)
输出结果都为:
也使用两层循环,例如生成ABC和XYZ中全部字母的排列组合:
优化前:
lt=[]
for a in "ABCDEF":
for b in "abcdef":
lt.append(a+b) #字符串相加即为合并
print(lt)
优化后:即将内层循环同样往后增加
lt=[a+b for a in "ABCDEF" for b in "abcdef"]
print(lt)
二、例题:利用循环表示出杨辉三角
杨辉三角示例图如下:(先思考思路,再自己敲,然后再来看解释)
首先找规律,例如可以写出第三层求第四层代码,代码如下
l3=[1,2,1]
l4=[]
for i in range(len(l3)-1):
l4.append(l3[i]+l3[i+1])
l4=[1]+l4+[1]
print(l4)
其运行结果为 :
同样我们也可以求第四层到第五层的代码:
l3=[1,2,1]
l4=[]
for i in range(len(l3)-1):
l4.append(l3[i]+l3[i+1])
l4=[1]+l4+[1]
print(l4)
l5=[]
for i in range(len(l4)-1):
l5.append(l4[i]+l4[i+1])
l5=[1]+l5+[1]
print(l5)
往下推可以,那么我们往上推,从第二轮推到第三轮
l2=[1,1]
l3=[]
for i in range(len(l2)-1):
l3.append(l2[i]+l2[i+1])
l3=[1]+l3+[1]
print(l3)
我们再推第一轮到第二轮
l1=[1]
l2=[]
for i in range(len(l1)-1):
l2.append(l1[i]+l1[i+1])
l2=[1]+l2+[1]
print(l2)
至此我们已经单独求完杨辉三角绝大多数思路部分内容,那么接下来该想一想如何完整的打印出来,
last_list=[1]
print(last_list)
for j in range(10):
next_list=[]
for i in range(len(last_list)-1):
next_list.append(last_list[i]+last_list[i+1])
next_list=[1]+next_list+[1]
last_list=next_list
print(last_list)
其中内层for循环可以写成列表生成式:
last_list=[] #初始化上一层
print(last_list)
for j in range(10): #自定义循环10次,即打印10层
next_list=[last_list[i]+last_list[i+1] for i in range(len(last_list)-1)]
next_list=[1]+next_list+[1]
last_list=next_list
print(last_list)
作者:菜就多练_0828