学习python第三天

 

列表

A= [1,2,3,4,5,6,7,8,9,10]
B = A
A[0] = 0
print(A,B)

将A列表直接赋值给B,其实是变量的引用,A和B指向同一个地址,当A发生改变时,B也变了,同理B变了,A也变

A= [1,2,3,4,5,6,7,8,9,10]
B= A.copy()
A[0] = 0
print(B)

用copy是相当于从新创建了一个列表,然后将原来列表的内容,复制到新的列表,此时A和B是分开的,A改变不会影响B

A=[[1,2,3],[1,2,3],[1,2,3]]
B = A.copy()
A[1][1] = 4
print(B)

如果是嵌套列表,那么此时用copy生成一个新的列表B,如果我们修改了A里面的子元素,那么B里面的元素也会跟着修改;原因就是copy是前拷贝,他只拷贝外层对象,如果包含嵌套对象的话,他还是拷贝对象的引用

A=[[1,2,3],[1,2,3],[1,2,3]]
B = copy.deepcopy(A)
A[1][1] = 4
print(B)

copy模块的deepcopy方法可以实现深拷贝,在拷贝外层对象的时候,也把嵌套对象,重新存了一份

列表推导式

[表达式 for 变量 in 列表]

A=[[1,2,3],
   [1,2,3],
   [1,2,3]]
#获取A列表斜对角的值
B = [A[i][i] for i in range(3)]
C = [A[i][len(A)-i-1]for i in range(len(A))]
print(C)
#生成一个元素为dd', 'ss', 'dd', 'ss', 'dd', 'ss的列表
y = [c*2 for c in "dsdsds"
#返回dsdds的ASCII码
code = [ord(c) for c in "dsdds"]

列表推导式和循环从结果上来看是一样的,但是过程有很大区别,循环是一个一个的替换原来列表的内容,而列表推导式是创建一个新的列表,然后将原来列表的名字附给这个新的列表

[表达式 for 变量 in 列表 if 条件]

#提取10以内的偶数
even = [i for i in range(10) if i % 2==0]
print(even)
#提取第一个字母是d的字符串
word = ["dadad","dffsdf","fdfdfd","gfsds"]
w = [w for w in word if w[0] == "d"]
print(w)

[表达式 for 变量 in 列表 for 变量 in 列表]嵌套

A = [[1,2,3],[2,3,4],[3,4,5]]
B = [w for rol in A for w in rol]

结果

ver = [x + y for x in "sdf" for y in "zxc"]
print(ver)

结果:

[表达式 for 变量 in 列表 if 条件 for 变量 in 列表 if 条件]

ver = [[x,y] for x in range(10) if x % 2 == 0 for y in range(10) if y % 3 == 0]
print(ver)

用循环实现:

_ = []
for i in range(10):
    if i % 2 == 0:
        for j in range(10):
            if j % 3 == 0:
                _.append([i,j])
print(_)

结果:

最后,虽然列表推导式运行速度比循环快而且更简洁,但是对于复杂的程序如果我们仍使用列表推导式,将会提高后期的阅读和维护成本,所以要自己拿捏好度

元组

Python 的元组与列表类似,不同之处在于元组的元素不能修改。

元组使用小括号,列表使用方括号。

元组创建很简单,只需要在括号中添加元素,并使用逗号隔开即可

A = (1,2,3,4,5,61)
print(A)

元组也可以使用切片:

print(A[:])
print(A[2:])
print(A[:3])

因为元组不可以修改,所以对于元组只有查的函数

count:查出元组内某个元素的个数

index:查出元组内某个元素的下标

A = (1,2,3,4,5,61,1,2,1,1)
print(A.count(1))
print(A.index(1))

元组也适用+和*

+:相当于生成一个包含A和B内所有元素的元组

*:相当于把A元组内的元素复制n遍然后附给一个新元组 

A = (1,2,3,4,5,61,1,2,1,1)
B = (1,2,3,4,5,61,1,2)
print(A+B)
print(A*3)

元组也支持遍历

A = (1,2,3,4,5,61,1,2,1,1)
for i in A:
    print(i)

生成只有一个元素的元组(元素后面必须带逗号,不然就是一个int类型了)

_ = (2,)

元组的打包和解包(列表和字符串也可以,即任何序列类都可以)

打包:生成一个元组

解包:将元组内的每个元素都拿出来

注意:赋值号左侧的参数个数必须和序列里面元素的个数一致,不然就会报错

python的多重赋值其实就是利用元组的打包和解包实现的:首先通过元组进行打包,然后再解包

A= (2,3,4)
#打包
x,y,z = A
#解包
print(x,y,z)

元组内的元素如果指向一个可变的列表,那么列表内的元素是可变的

A=([1,2,3],[4,5,6])
A[0][1] = 9
print(A)

你可能感兴趣的:(学习)