被列表推导式充斥的列表

本文介绍了Python中列表的各种操作,包括加法、乘法、嵌套列表、is函数、浅拷贝与深拷贝,重点讲解了列表推导式的用法,包括一维和多维列表推导,以及筛选、降维和嵌套等高级应用。通过实例解析了列表推导式的灵活性和效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近又颓了很久,论文数据整理没思路,整理不下去了,还是继续学python吧。

今天终于终于学完了b站上的列表,太多知识点了,321开始!

1.列表的简单运算

①加(即+拼接)

s=[1,2,3]

t=[4,5,6]

s+t     

>>>[1,2,3,4,5,6]

②乘

s*3

>>>[1,2,3,1,2,3,1,2,3]

2.嵌套列表

①列表的嵌套

s=[[1,2,3],[4,5,6],[7,8,9]]

②访问嵌套列表

Ⅰ循环法:

for i in s:

     for each in i:

            print(each)

Ⅱ下标法:

s[0]   >>>[1,2,3]

s[0][0]   >>>1

③循环创建嵌套列表:

Ⅰ循环法:

A=[0]*3

for i in range(3):

     A[i]=[0]*3   

>>>A  :  [[0,0,0],[0,0,0],[0,0,0]]

Ⅱ列表的乘:

B=[[0]*3]*3

>>>B  :  [[0,0,0],[0,0,0],[0,0,0]]

注意:差别在于修改元素时,B修改的是每一行第n个元素,而A修改的只是单个元素。

B[1][1]=1   >>> [[0,1,0],[0,1,0],[0,1,0]]

A[1][1]=1   >>> [[0,0,0],[0,1,0],[0,0,0]]

3.is函数(判断A和B是否相等)

例如:

A="ABC"

B="ABC"

A is B   >>>True

x=[1,2,3]

y=[1,2,3]

x is y   >>>False

因为变量不是盒子,而是引用:例如x=[1,2,3],y=x。相当于x指向存放[1,2,3]的地址,而这个地址给了y。

4.浅拷贝和深拷贝

深拷贝:无论怎么改动新列表(一维or多维),原列表都不变。

浅拷贝就是,对于多维列表,只是第一维深拷贝了,内层的元素改变了,原列表也会变。因此,主要体现在多维列表的差别上!!

①浅拷贝:

Ⅰcopy方法

例如:

x=[1,2,3]

y=x.copy()

x[1]=1

>>> x : [1,1,3]

>>> y : [1,2,3]    注意1:copy只是拷贝整个列表对象。

注意2:copy对于嵌套对象无效

例如:

x=[[1,2,3],[4,5,6],[7,8,9]]

y=x.copy()

x[1][1]=0

>>>  x: [[1,2,3],[4,0,6],[7,8,9]]

>>>  y: [[1,2,3],[4,0,6],[7,8,9]]   因为拷贝的是列表外层对象,即引用。

Ⅱ切片

y=x[:]   同上述copy方法

Ⅲcopy函数

import copy

x=[[1,2,3],[4,5,6],[7,8,9]]

y=copy.copy(x)

②深拷贝

import copy

x=[[1,2,3],[4,5,6],[7,8,9]]

y=copy.deepcopy(x)

这时候x改变,y就不为所动了,还是原来的值。

5.列表推导式(最难)

①一维列表:

oho=[1,2,3,4,5]

for i in range(len(oho)):

       ono[i]=i*2

>>>oho : [2,4,6,8,10]   相当于列表推导式的:

oho=[i*2 for i in oho]

Ⅱ oho=[i for i in range(10)]

解释:range(10)取0~9的数,存到i中,再看表达式i,因此,oho:[0,1,2,3,4,5,6,7,8,9]

Ⅲ x=[i+1 for i in range(10)] 相当于:

for i in range(10):

     x.append(i+1)

>>>x:[1,2,3,4,5,6,7,8,9,10]

Ⅳ字符串:

y=[c*2 for c in "FishC"]

>>>y : ["FF","ii","ss","hh","CC"]

Ⅴ转编码:

code=[ord(c) for c in "FishC"]

>>>code:[70,105,104,67,33]

②多维列表:

matrix=[[1,2,3],

                [4,5,6],

                [7,8,9]]

col2=[row[1] for row in matrix]

>>>col2:[2,5,8] 解析:通过for语句获取matrix的每一行,存放在col2中的是每一行的第二个元素,即row[1]。

Ⅱdiag=[matrix[i][i] for i in range(len(matrix))]

>>> diag: [1,5,9]

循环和列表推导式的区别是:循环是通过迭代来逐个修改原列表中的元素,而列表推导式是直接创建一个新的列表,然后再赋值为原先的这个变量名。

Ⅲ创建二维列表

s=[[0]*3 for i in range(3)]

相当于:

for i in range(3):

     s[i]=[0]*3

③筛选(列表推导式加if)

even=[i for i in range(10) if i%2==0]

>>> even:[0,2,4,6,8]    解析:先执行for i in range(10),再执行if i%2==0,最后执行i

words=["Great","FishC","Pear","Apple","Blue"]

要求:筛选“F”开头的单词

fwords=[w for w in words if w[0]="F"]

>>>w:"FishC"

④嵌套

Ⅰ将二维列表降维

matrix=[[1,2,3], [4,5,6],[7,8,9]]

flatten=[col for row in matrix for col in row]     相当于:

for row in matrix:

     for col in row:

          flatten.append(col)

>>> flatten:[1,2,3,4,5,6,7,8,9]      

[x+y for x in "fishc" for y in "FishC"]  相当于:

_=[]

for x in "fishc":

     for y in "FishC":

           _.append(x+y)

>>>_:["fF","fi","fs".......]

⑤终极形式,for 和 if一起嵌套:

例如:

[[x,y] for x in range(10) if x%2==0 for y in range(10) if y%3==0]相当于:

_=[]

for x in range(10):

     if x%2==0:

          for y in range(10):

                    if y%3==0:

                             _.append([x,y])

列表终于终于结束了,可太不容易了呜呜呜!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值