(3)列表的赋值与复制
1.赋值:
new = ls,对象的引用
浅拷贝:
list.copy(),ls[:]拷贝父对象,不拷贝内部子对象
深拷贝:
copy.deepcopy(ls),完全拷贝父对象和子对象
赋值
将列表直接赋值给另一个变量时,不产生新对象
一个列表对象两个标签
ls = [1, 2, 3] new = ls ls.append(4)
拷贝父对象,不拷贝内部子对象
原列表父对象更新不影响新列表
原列表可变类型元素更新影响新列表
list.copy()
ls[:]
ls = [2, [22, 33], ('a', 'c')] ls2 = ls.copy()# 浅复制ls.append(4)# 只改 变原列表 ls[1].append(44)# 同时改变两个列表
递归拷贝到底的叫深拷贝
拷贝结果完全独立于原对象
原列表可变类型元素更新不影响新列表
copy.deepcopy(ls)
ls = [2, [22, 33], ('a', 'c')] ls2 = copy.deepcopy(ls) # 深复制 ls.append(4) # 只改变原列表 ls[1].append(44) # 只改变原列表 print(ls2)
(4)推导式
推导式又称解析式
从一个序列构建另一个新序列
一种集成了变换和筛选功能的函数
列表推导式 [x表达式for x in 列表if 条件表达式] 字典推导式 集合推导式 {x表达式for x in 集合if 条件表达式} {(k,v)表达式for k,vin 字典if 条件表达式}
[x表达式for x in 列表if 条件表达式]
[(x, y表达式) for x in 列表1 for y in 列表2 if 条件表达式]
根据一个列表中的每个元素通过某种运算或筛选得到另
外一系列新数据,创建一个新列表
[x表达式for x in 列表if 条件表达式]
列表中的每个元素通过某种运算或筛选得
到另外一系列新数据,创建一个新列表
squares = [] for x in range(10): squares.append(x ** 2) squares = [x ** 2 ] for x in range(10)
[x表达式for x in 列表if 条件表达式]
for 前面表达式或函数,if后面加筛选条件
ls = [-4, -2, 0, 4] ls1 = [x * 2 for x in ls] # 列表元素乘2 [-8, -4, 0, 8] ls3 = [x ** 2 for x in ls if x < 0] # 正数元素平方[16, 4] ls2 = [abs(x) for x in ls] # 用abs()函数推导[4, 2, 0, 4] print(ls1) print(ls2) print(ls3)
[x表达式for x in 列表if 条件表达式]
for 前面可以是函数
def fun(x): return x + x ** 2 + x ** 3 z = [(i + 1, fun(i)) for i in range(5)] # 序号与函数值的组合 print(z)
水仙花数是指一个3 位数每位上的数字的3 次幂之和等于
他本身,例如:153 = 13+ 53+ 33,称153是水仙花数。
for num in range(100, 1000): if num == sum([int(i) ** 3 for i in str(num)]): print(num, end=' ')