列表的一些操作

列表追加元素

list.extend()

作用

在列表末尾一次性追加另一个序列中的多个值(用新列表扩展原来的列表)

例子

>>> list1 = ['Google', 'Runoob', 'Taobao']
>>> list2=list(range(5)) # 创建 0-4 的列表 list1.extend(list2) # 扩展列表
>>> print("扩展后的列表:", list1)
扩展后的列表: ['Google', 'Runoob', 'Taobao']

结果:
扩展后的列表: ['Google', 'Runoob', 'Taobao', 0, 1, 2, 3, 4]

将列表变成字符串

''.join(res)

列表的复制

在Python中,列表的复制、浅复制和深度复制的主要区别是:

  1. 赋值复制
    使用 "=" 号赋值或 copy() 方法只是复制了对象的引用,并没有复制对象本身。也就是说原列表和复制列表对应同一个内存地址,修改任一列表都会影响另一个列表。
a = [1, 2, 3]
b = a
  1. 浅复制(Shallow Copy)
    使用切片操作符[:]、copy() 方法可以构造一个新的列表对象,但新的列表中的元素仍然引用自原始列表中的元素。
import copy

a = [1, 2, 3]
b = a[:] 
c = copy.copy(a)
  1. 深度复制(Deep Copy)
    使用 copy 模块的 deepcopy() 方法可以完全复制一个对象,新旧对象完全独立,不共享内存。
import copy

a = [1, 2, 3]  
b = copy.deepcopy(a)

deepcopy() 递归地复制对象中的所有子对象。

所以,在 Python 中区分浅复制和深度复制非常重要。简单的赋值复制只会复制对象的引用。如果需要复制列表本身,应该使用切片操作符[:] 或者 copy() 来浅复制,如果列表包含了其他的可变子对象,而且需要递归复制,就需要使用 deepcopy() 来实现深度复制。

图解

1、赋值引用

b = a: a 和 b 都指向同一个对象。
attach/7e5b0b29962f3650bc2e8504f8d1a3e1_MD5.png

2、浅拷贝

b = a.copy():  a 和 b父对象是一个独立的对象,但他们的子对象还是指向统一对象(是引用)。

attach/f40f261b67d63716ce3e485c7c2496b5_MD5.png

3、深拷贝

b = copy.deepcopy(a): 完全拷贝了父对象及其子对象,a 和 b 的父对象及其子对象,两者都是完全独立的。

attach/86af52f0026a194861ca32dce00d070e_MD5.png
参考:Python 直接赋值、浅拷贝和深度拷贝解析 | 菜鸟教程 (runoob.com)

二维列表排序

使用sorted()函数进行排序,可使用key = lambda x:(x[0],-x[1]) 对元素升序或降序,其中-代表降序,不加为升序。

>>> intervals = [[1,2],[2,3],[3,4],[1,3]]
>>> intervals = sorted(intervals,key = lambda x:(x[0],-x[1]))
>>> intervals
[[1, 3], [1, 2], [2, 3], [3, 4]]

创建二维列表

创建m*n的列表
方法一

>>> m=3
>>> n=4
>>> lists = [[0 for i in range(n)] for j in range(m)]
>>> lists[1][1]=1
>>> lists
[[0, 0, 0, 0], [0, 1, 0, 0], [0, 0, 0, 0]]

方法二

>>> lists = [[0]*n]*m
>>> lists
[[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]
>>> lists[1][1]=1
>>> lists
[[0, 1, 0, 0], [0, 1, 0, 0], [0, 1, 0, 0]]

方法三

>>> lists = [[0]*n for j in range(m)]
>>> lists
[[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]
>>> lists[1][1]=1
>>> lists
[[0, 0, 0, 0], [0, 1, 0, 0], [0, 0, 0, 0]]

其中,方法一创建的列表各元素是独立的,方法二创建的列表元素之间是浅复制,改变元素会导致相关联元素改变。方法三与方法1相同。