当一个人列表是嵌套列表时,copy函数实现的是浅拷贝,要想实现深拷贝,则要使用copy模块的deepcopy实现深拷贝
示例:
>>> a=[[1,2,3],[4,5,6],[7,8,9]] >>> import copy >>> d=a[:] >>> e=copy.deepcopy(a) >>> a[0][0]=0 >>> a [[0, 2, 3], [4, 5, 6], [7, 8, 9]] >>> d [[0, 2, 3], [4, 5, 6], [7, 8, 9]] >>> e [[1, 2, 3], [4, 5, 6], [7, 8, 9]]列表推导式
列表推导式的功能一般可由循环实现
列表推导式的模板:
[ expression for target in iterable ]
列表推导式有很多作用
示例:
>>> x=[i for i in range(9)] >>> x [0, 1, 2, 3, 4, 5, 6, 7, 8] >>> x=[i*2 for i in "abcd"] >>> x ['aa', 'bb', 'cc', 'dd'] >>> code=[ord(i) for i in "abcd"]#ord可将字符转换为对应的Unicode编码 >>> code [97, 98, 99, 100] #提取矩阵中的第3列元素 >>> a=[[1,2,3], [4,5,6], [7,8,9]] >>> col3=[row[2] for row in a] >>> col3 [3, 6, 9] #获取对角线元素 >>> diag=[ a[i][i] for i in range(len(a))] >>> diag [1, 5, 9] #通过列表推导式建立二维列表 >>> a=[[0]*3 for i in range(3)] >>> a [[0, 0, 0], [0, 0, 0], [0, 0, 0]] >>> a[0][0]=1 >>> a [[1, 0, 0], [0, 0, 0], [0, 0, 0]]
列表推导式还可添加一个用于筛选的if 分句
[ expression for target in iterable if condition]
执行顺序:先执行for语句,再执行if语句,最后执行表达式语句
示例:
>>> a=[i for i in range(10) if i%2==0] >>> a [0, 2, 4, 6, 8] >>> a=[i+1 for i in range(10) if i%2==0] >>> a [1, 3, 5, 7, 9]
列表推导式还可以嵌套使用3
示例:
#将二维列表转化为一维列表 >>> a=[[1,2,3],[4,5,6],[7,8,9]] >>> b=[col for row in a for col in row] >>> b [1, 2, 3, 4, 5, 6, 7, 8, 9] >>> a=[[x,y] for x in range(5) if x%2==0 for y in range(5) if y%3==0] >>> a [[0, 0], [0, 3], [2, 0], [2, 3], [4, 0], [4, 3]]



