零基础学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)

其输出结果为:

c6fe73404b6043adab5974b95da4e168.png

 

方法二:使用列表推导式,一行代码即可代替循环生成上面的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)

输出结果都为:

8f1070132a954d3c819c677d221a6486.png

 

也使用两层循环,例如生成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)

 

二、例题:利用循环表示出杨辉三角

        杨辉三角示例图如下:(先思考思路,再自己敲,然后再来看解释)

f3a1aec506b44e8a9374c54a8c6c2a85.png9f6a4a20bb864149aba0b366fe8b624e.png

 

首先找规律,例如可以写出第三层求第四层代码,代码如下

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)

其运行结果为 :  3a45a00118e94f20be5e60fb171408aa.png

同样我们也可以求第四层到第五层的代码:

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)

e41a4df0eb2d4825b070b972cf81ab35.png

往下推可以,那么我们往上推,从第二轮推到第三轮

l2=[1,1]
l3=[]
for i in range(len(l2)-1):
    l3.append(l2[i]+l2[i+1])
l3=[1]+l3+[1]
print(l3)

da75fc42a3d8494ba2ea2fe002137557.png

我们再推第一轮到第二轮

l1=[1]
l2=[]
for i in range(len(l1)-1):
    l2.append(l1[i]+l1[i+1])
l2=[1]+l2+[1]
print(l2)

c65032ac8c3047cd9916be34820aecf2.png

至此我们已经单独求完杨辉三角绝大多数思路部分内容,那么接下来该想一想如何完整的打印出来,

 

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

物联沃分享整理
物联沃-IOTWORD物联网 » 零基础学Python:第八讲-列表推导式

发表回复