List(列表) 是 Python 中使用最频繁的数据类型。

列表可以完成大多数集合类的数据结构实现。列表中元素的类型可以不相同,它支持数字,字符串甚至可以包含列表(所谓嵌套)。

列表是写在方括号 [ ] 之间、用逗号分隔开的元素列表。

和字符串一样,列表同样可以被索引和截取,列表被截取后返回一个包含所需元素的新列表。

列表(list)作为 Python 中最常用的数据类型之一,是一个可增加、删除元素的可变容器。

创建List

list1 = []  # 创建空的list
list2 = [1,'这是list集合',29.5,'121212']
list3 = [2,'abc',[1,2,3]]

基本操作

求 List 内元素的个数
len(list1)  # 0
len(list2)  # 4
len(list3)  # 3
遍历 List 列表
for _ in list3:
    print(f'{_}的类型为{type(_)}')
取出元素
print(list2[1])
增加元素
list3.append([2,4,6])
print(list3)

append 默认增加到 列表尾部。

在指定位置插入元素
list2.insert(2,[2,2,2,2])
print(list2);

在 list2 列表的索引为 2 的地方,插入一个另一个列表元素。

移除列表尾部元素
temp = list2.pop()
print(temp)

pop 方法返回的是 移除的那个元素本身。

移除指定元素
list2.remove('121212')
print(list2)

pop 只能移除列表尾部元素,要想移除其他元素,可以使用remove 方法。

深、浅拷贝

浅拷贝

首先定义有个列表,拿出其中的列表元素。

list1 = ['001','2019-11-11',['薇恩','乌兹']]
list2 = list1[2]

然后对 list2 进行修改,打印列表1 和列表2的值。

list2[1] = 'UZI'

print(list1)
print(list2)

发现 list1 中的元素也对应改变了,因为 list2 引用 list1 的第三个元素,所以 list1 也会相应改变。

如果不想改变 list1 的第三个元素,就需要复制出 list1 的这个元素:

list1 = ['001','2019-11-11',['薇恩','乌兹']]

list2_deep = list1[2].copy()


list2_deep[1] = 'UZI'

print(list1)
print(list2_deep)

此时,再对 list2_deep 操作,便不会影响 list1[2] 的值。

注意:copy 函数,仅仅实现对内嵌对象的一层拷贝,属于 shallow copy(浅拷贝)

深拷贝

先看下面的代码

list = [1,2,[3,4,5]]
new_list = list.copy()
new_list[0] = 10
new_list[2][1] = 40

修改后,分别测试两个值的相等性。

print(list[0] == new_list[0])   // False
print(list[2][1] == new_list[2][1])  // True

第一个输出 False,证明实现了拷贝。
第二个输出 True,证明是浅拷贝,不是深拷贝。copy 只完成了一层 copy。

要想实现深拷贝,需要使用 copy 模块的 deepcopy 函数:

from copy import deepcopy

list = [1,2,[3,4,5]]
new_list = deepcopy(list)
new_list[0] = 10
new_list[2][1] = 40
print(list[0] == new_list[0])   // False
print(list[2][1] == new_list[2][1])  // False

打印结果,都为 False,证明内嵌的 List 列表也完成了复制。

切片

Java 和 C++ 中,访问数组中的元素只能一次一个,但 Python 增加切片功能为访问列表带来极大便利。利用内置函数 range(start,stop,step) 生成序列数据,并转为 List 类型。

a = list(range(1,20,3))
print(a)

# 输出结果:
[1, 4, 7, 10, 13, 16, 19]
a[:3] 获取列表 a 的前三个元素,返回: [1, 4, 7]
a[-1] 获取 a 的最后一个元素,返回: 19
a[:-1] 获取除最后一个元素的切片,返回: [1, 4, 7, 10, 13, 16]
a[1:5] 生成索引为 [1,5)(不包括索引 5),返回: [4, 7, 10, 13]
a[1:5:2] 生成索引 [1,5) ,步长为 2,返回: [4, 10]
a[::3] 生成索引 [0,len(a)) 步长为 3,返回: [1, 10, 19]
a[::-3] 生成逆向索引 [len(a),0) 步长为 3,返回: [19, 10, 1]

逆向:从列表最后一个元素访问到第一个元素的方向。

逆向列表:
首先定义函数

def reverse(list):
    return list[::-1]

调用函数

ra = reverse(a)
print(ra)

# 输出结果
[19, 16, 13, 10, 7, 4, 1]
Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐