Python中的列表(List)
列表(List)是 Python 中最基本的数据结构,它是一种有序的集合,列表中每个元素都有其对应的位置值(索引)。
创建列表
一般在创建列表时,分为创建空列表和非空列表,其创建方式如下:
# 创建空列表,有两种方式
list1 = list()
list2 = []
# 创建同一数据类型的列表
list3 = ["a", "b", "c", "d", "e", "f"]
# 创建不同数据类型的列表
list4 = ["a", 2, {}, [1, 3], False, ()]
从上面可以看到,我们只需要把列表的所有元素放在 方括号 []
里面,每个元素之间通过 逗号 ,
间隔起来即可,当然,列表中允许存放不同数据类型的元素。
获取列表中的元素
- 下标索引取值
列表中的下标索引都是从 0 开始计算,第一个元素索引是 0 ,第二个元素索引是 1 ,以此类推。
>>> books = ["语文", "数学", "英语", "历史", "物理", "化学"]
>>>
>>> books[0]
'语文'
>>> books[5]
'化学'
另外,我们也可以从列表尾部开始计算索引,此时最后一个元素索引为 -1,倒数第二个元素索引为 -2 ,以此类推即可。当我们需获取列表最后一个元素,但又不知道列表长度时,可以通过该方式快速获取。
>>> books = ["语文", "数学", "英语", "历史", "物理", "化学"]
>>>
>>> books[-1]
'化学'
>>> books[-2]
'物理'
>>> books[-6]
'语文'
>>>
>>> books[100]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: list index out of range
如果设置的索引不存在,那么会报错:IndexError: list index out of range
- 切片取值
列表中切片的语法为:列表[start:end:step]
,通过切片可以获取到列表中指定范围的元素。在这里,需要注意切片的规则是左闭右开,也就是说包含头部 start,但不包含尾部 end ,而 step 则表示切片的步长,需要每间隔 step 个元素取一次。
>>> books = ["语文", "数学", "英语", "历史", "物理", "化学"]
>>>
>>> books[1:4:2] # 从第2个到第4个元素,每间隔2个元素取值
['数学', '历史']
>>> books[1::2] # 从第2个到列表末尾,每间隔2个元素取值
['数学', '历史', '化学']
>>> books[1:4] # 获取从第2个到第4个的所有元素
['数学', '英语', '历史']
>>> books[:] # 获取全部元素
['语文', '数学', '英语', '历史', '物理', '化学']
列表切片时,我们可以设置切片的步长为负值,比如设置 step = -1,那么我们就可以逆序获取列表的元素。
>>> books[::-1] # 逆序获取全部元素,即反转列表
['化学', '物理', '历史', '英语', '数学', '语文']
更新列表
在对列表进行更新操作时,我们可以根据索引对列表的元素进行修改或更新,也可以使用 append() 或 insert()
方法来添加元素。
- 通过下标索引更新列表
>>> books = ["语文", "数学", "英语", "历史", "物理", "化学"]
>>>
>>> books[1] = "地理"
>>> print(books)
['语文', '地理', '英语', '历史', '物理', '化学']
当然,我们也可以通过切片赋值的方式来更新列表。
>>> books[2:4] = ["英语222", "历史222"]
>>> print(books)
['语文', '地理', '英语222', '历史222', '物理', '化学']
>>>
>>> books[2:4] = 1234
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: can only assign an iterable
需注意的是,通过切片方式赋值的值必须是可迭代对象(比如列表、元组等),否则会出现报错:TypeError: can only assign an iterable
- 通过 append() 在列表末尾添加新对象
>>> books = ["语文", "数学", "英语", "历史", "物理", "化学"]
>>>
>>> books.append("地理")
>>> print(books)
['语文', '数学', '英语', '历史', '物理', '化学', '地理']
>>>
>>> books.append(6666)
>>> print(books)
['语文', '数学', '英语', '历史', '物理', '化学', '地理', 6666]
- 通过 insert() 在指定位置插入新对象
>>> books = ["语文", "数学", "英语", "历史", "物理", "化学"]
>>>
>>> books.insert(1, "地理")
>>> print(books)
['语文', '地理', '数学', '英语', '历史', '物理', '化学']
删除列表中的元素
在对列表进行删除操作时,我们可以根据索引删除对应位置的元素,也可以根据元素本身的值进行删除,当然,还可以直接清空整个列表。
- 通过 del 删除指定索引下的元素
>>> books = ["语文", "数学", "英语", "历史", "数学", "物理", "数学"]
>>>
>>> del books[1] # 删除第 2 个元素
>>> print(books)
['语文', '英语', '历史', '数学', '物理', '数学']
>>>
>>> del books[1:4] # 删除第 2 个到第 4 个的所有元素
>>> print(books)
['语文', '物理', '数学']
如果要删除列表的索引不存在,那么会出现报错,如下:
>>> del books[100]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: list assignment index out of range
- 通过 pop() 删除指定索引下的元素,会返回删除的元素
>>> books = ["语文", "数学", "英语", "历史", "数学", "物理", "数学"]
>>>
>>> books.pop() # 默认删除列表最后一个元素
'数学'
>>> print(books)
['语文', '数学', '英语', '历史', '数学', '物理']
>>>
>>> books.pop(3) # 删除列表指定索引下的元素
'历史'
>>> print(books)
['语文', '数学', '英语', '数学', '物理']
如果要删除列表的索引不存在,那么会出现报错,如下:
>>> books.pop(100)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: pop index out of range
- 通过 remove() 删除指定元素,只会删除匹配的第一个元素
>>> books = ["语文", "数学", "英语", "历史", "数学", "物理", "数学"]
>>>
>>> books.remove("数学")
>>> print(books)
['语文', '英语', '历史', '数学', '物理', '数学']
如果要删除列表的对象不存在,那么会出现报错,如下:
>>> books.remove("美术")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: list.remove(x): x not in list
- 通过 clear() 删除列表所有元素
>>> books = ["语文", "数学", "英语", "历史", "数学", "物理", "数学"]
>>>
>>> books.clear()
>>>
>>> print(books)
[]
列表运算操作符
- 运算符 + ,用于组合拼接列表
>>> list1 = [1, 3, 5]
>>> list2 = [2, 4, 6]
>>>
>>> print(list1 + list2)
[1, 3, 5, 2, 4, 6]
- 运算符 * ,用于重复列表
>>> name = ["hello", "word"]
>>>
>>> print(name * 3)
['hello', 'word', 'hello', 'word', 'hello', 'word']
- 关键字 in
通过关键字 in
,可检查当前列表中是否包含指定元素,返回结果为布尔值 True 或 False。
>>> list3 = [1, 2, 3]
>>>
>>> print(2 in list3)
True
>>>
>>> print(6 in list3)
False
通过关键字 in
,还可以用于遍历当前列表。
books = ["语文", "数学", "英语", "历史", "物理", "化学"]
for i in books:
print(i, end=" ")
列表函数&方法
函数 & 方法 | 描述 |
---|---|
len(list) | 返回列表元素个数 |
max(list) | 返回列表元素最大值 |
min(list) | 返回列表元素最小值 |
list(iterable) | 将可迭代对象转换为列表,若 iterable 为空则创建空列表 |
list.append(obj) | 在列表末尾添加新的对象 |
list.count(obj) | 统计某个元素在列表中出现的次数 |
list.extend(seq) | 在列表末尾一次性追加另一个序列中的多个值 |
list.index(obj) | 从列表中找出某个元素第一次出现的索引位置 |
list.insert(index, obj) | 将对象插入到列表指定索引位置 |
list.pop(index) | 删除并返回列表中的一个元素(默认最后一个元素) |
list.remove(obj) | 删除列表中某个值(只删除第一个匹配项) |
list.reverse() | 反向列表中元素 |
list.sort() | 对原列表进行排序 |
list.clear() | 清空列表 |
list.copy() | 复制列表,相当于 list[:] ,使用的是浅拷贝 |