Python 零基础教程

Python 列表操作:添加、删除与排序

列表是 Python 中的基础数据结构,允许你存储和操作项目集合。

本章将深入探讨修改列表的基本操作:添加元素、删除元素以及对元素进行排序。

1. 向列表中添加元素

在 Python 中,有多种方法可以向列表添加元素。每种方法都有其特定的应用场景,具体取决于你想在列表的哪个位置添加元素,以及你是添加单个元素还是多个元素。

1.1 append() 方法

append() 方法将单个元素添加到列表的末尾。这是向列表添加元素最常用的方法。

# 示例:向列表末尾添加一个元素
my_list = [1, 2, 3]
my_list.append(4)
print(my_list)  # 输出: [1, 2, 3, 4]

# 追加一个字符串
my_list = ["apple", "banana", "cherry"]
my_list.append("date")
print(my_list) # 输出: ['apple', 'banana', 'cherry', 'date']

# 追加一个列表(会创建一个嵌套列表)
my_list = [1, 2, 3]
my_list.append([4, 5])
print(my_list) # 输出: [1, 2, 3, [4, 5]]

1.2 insert() 方法

insert() 方法在列表的指定索引处添加一个元素。它接收两个参数:你希望插入元素的索引位置,以及元素本身。

# 示例:在指定索引处插入一个元素
my_list = [1, 2, 3]
my_list.insert(1, 4)  # 在索引 1 处插入 4
print(my_list)  # 输出: [1, 4, 2, 3]

# 在列表开头插入
my_list = ["apple", "banana", "cherry"]
my_list.insert(0, "date")
print(my_list) # 输出: ['date', 'apple', 'banana', 'cherry']

# 在超出列表当前长度的位置插入(其作用类似于 append)
my_list = [1, 2, 3]
my_list.insert(10, 4)
print(my_list) # 输出: [1, 2, 3, 4]

1.3 extend() 方法

extend() 方法将多个元素添加到列表的末尾。它接收一个可迭代对象(例如另一个列表、元组或字符串)作为参数,并将该可迭代对象中的每个元素依次添加到列表的末尾。

# 示例:用另一个列表扩展当前列表
my_list = [1, 2, 3]
my_list.extend([4, 5, 6])
print(my_list)  # 输出: [1, 2, 3, 4, 5, 6]

# 用元组扩展
my_list = ["apple", "banana"]
my_list.extend(("cherry", "date"))
print(my_list) # 输出: ['apple', 'banana', 'cherry', 'date']

# 用字符串扩展(将每个字符作为一个元素添加)
my_list = [1, 2, 3]
my_list.extend("456")
print(my_list) # 输出: [1, 2, 3, '4', '5', '6']

1.4 使用 + 运算符

+ 运算符也可以用于拼接列表,从而将一个列表的元素添加到另一个列表中。这会创建一个列表,而原始列表保持不变。

# 示例:使用 + 运算符拼接列表
list1 = [1, 2, 3]
list2 = [4, 5, 6]
new_list = list1 + list2
print(new_list)  # 输出: [1, 2, 3, 4, 5, 6]
print(list1) # 输出: [1, 2, 3] (list1 保持不变)

# 组合不同的数据类型(需要类型一致才能使用 + 拼接)
list1 = [1, 2, "hello"]
list2 = [3.14, True]
new_list = list1 + list2
print(new_list) # 输出: [1, 2, 'hello', 3.14, True]

2. 从列表中删除元素

与添加元素类似,Python 提供了多种从列表中删除元素的方法。选择哪种方法取决于你是知道要删除元素的索引,还是知道要删除元素的值。

2.1 remove() 方法

remove() 方法从列表中删除第一次出现的指定值。如果在列表中找不到该值,它会引发一个 ValueError

# 示例:按值删除元素
my_list = [1, 2, 3, 2]
my_list.remove(2)  # 删除第一次出现的 2
print(my_list)  # 输出: [1, 3, 2]

# 删除一个字符串
my_list = ["apple", "banana", "cherry", "banana"]
my_list.remove("banana")
print(my_list) # 输出: ['apple', 'cherry', 'banana']

# 如果找不到元素,处理 ValueError
my_list = [1, 2, 3]
try:
    my_list.remove(4)
except ValueError:
    print("列表中找不到该元素") # 输出: 列表中找不到该元素

2.2 pop() 方法

pop() 方法删除并返回指定索引处的元素。如果没有指定索引,它将默认删除并返回列表的最后一个元素。

# 示例:按索引删除元素
my_list = [1, 2, 3]
removed_element = my_list.pop(1)  # 删除索引 1 处的元素(即 2)
print(my_list)  # 输出: [1, 3]
print(removed_element)  # 输出: 2

# 删除最后一个元素
my_list = ["apple", "banana", "cherry"]
removed_element = my_list.pop()
print(my_list) # 输出: ['apple', 'banana']
print(removed_element) # 输出: cherry

# 如果索引超出范围,处理 IndexError
my_list = [1, 2, 3]
try:
    removed_element = my_list.pop(5)
except IndexError:
    print("索引超出范围") # 输出: 索引超出范围

2.3 del 语句

del 语句是从列表中删除元素的一种更通用的方法。它可以用来删除单个元素、一段切片元素,甚至整个列表。

# 示例:按索引删除单个元素
my_list = [1, 2, 3]
del my_list[1]  # 删除索引 1 处的元素(即 2)
print(my_list)  # 输出: [1, 3]

# 删除一段切片元素
my_list = ["apple", "banana", "cherry", "date"]
del my_list[1:3] # 删除从索引 1 开始到索引 3(不包括 3)的元素
print(my_list) # 输出: ['apple', 'date']

# 删除整个列表
my_list = [1, 2, 3]
del my_list
# print(my_list)  # 这会引发 NameError,因为该列表已不再存在

2.4 clear() 方法

clear() 方法会清空列表中的所有元素,使其成为一个空列表。

# 示例:清空列表
my_list = [1, 2, 3]
my_list.clear()
print(my_list)  # 输出: []

3. 对列表元素进行排序

Python 提供了两种对列表进行排序的主要方法:sort() 方法和 sorted() 函数。理解它们之间的区别非常重要。

3.1 sort() 方法

sort() 方法就地 (in place) 对列表进行排序,这意味着它会直接修改原始列表。它不会返回一个新列表。

# 示例:按升序对列表进行排序
my_list = [3, 1, 4, 1, 5, 9, 2, 6]
my_list.sort()
print(my_list)  # 输出: [1, 1, 2, 3, 4, 5, 6, 9]

# 按字母顺序对字符串列表进行排序
my_list = ["banana", "apple", "cherry"]
my_list.sort()
print(my_list) # 输出: ['apple', 'banana', 'cherry']

# 按降序排序
my_list = [3, 1, 4, 1, 5, 9, 2, 6]
my_list.sort(reverse=True)
print(my_list)  # 输出: [9, 6, 5, 4, 3, 2, 1, 1]

# 使用自定义 key 函数进行排序
my_list = ["banana", "Apple", "cherry"]
my_list.sort(key=str.lower) # 不区分大小写进行排序
print(my_list) # 输出: ['Apple', 'banana', 'cherry']

3.2 sorted() 函数

sorted() 函数会接收任何可迭代对象(例如列表、元组、字符串),并从中返回一个全新的已排序列表。原始的可迭代对象保持不变。

# 示例:使用 sorted() 对列表进行排序
my_list = [3, 1, 4, 1, 5, 9, 2, 6]
new_list = sorted(my_list)
print(my_list)  # 输出: [3, 1, 4, 1, 5, 9, 2, 6] (原始列表保持不变)
print(new_list)  # 输出: [1, 1, 2, 3, 4, 5, 6, 9]

# 对元组进行排序
my_tuple = (3, 1, 4, 1, 5)
new_list = sorted(my_tuple)
print(my_tuple) # 输出: (3, 1, 4, 1, 5)
print(new_list) # 输出: [1, 1, 3, 4, 5]

# 对字符串进行排序(返回字符列表)
my_string = "banana"
new_list = sorted(my_string)
print(my_string) # 输出: banana
print(new_list) # 输出: ['a', 'a', 'a', 'b', 'n', 'n']

# 按降序排序
my_list = [3, 1, 4, 1, 5, 9, 2, 6]
new_list = sorted(my_list, reverse=True)
print(new_list)  # 输出: [9, 6, 5, 4, 3, 2, 1, 1]

# 使用自定义 key 函数进行排序
my_list = ["banana", "Apple", "cherry"]
new_list = sorted(my_list, key=str.lower)
print(new_list) # 输出: ['Apple', 'banana', 'cherry']

3.3 排序中的 Key 函数

无论是 sort() 还是 sorted(),都接受一个可选的 key 参数。这个参数应该是一个函数,该函数会接收列表中的单个元素,并返回一个用于排序依据的值。这在对复杂对象进行排序,或者希望根据特定属性进行排序时非常有用。

# 示例:根据元组的第二个元素对元组列表进行排序
my_list = [(1, 'z'), (2, 'a'), (3, 'b')]
my_list.sort(key=lambda item: item[1])  # 按照每个元组的第二个元素排序
print(my_list)  # 输出: [(2, 'a'), (3, 'b'), (1, 'z')]

# 根据特定键对字典列表进行排序
my_list = [{'name': 'Alice', 'age': 30}, {'name': 'Bob', 'age': 25}, {'name': 'Charlie', 'age': 35}]
new_list = sorted(my_list, key=lambda item: item['age']) # 按照 'age' 键排序
print(new_list) # 输出: [{'name': 'Bob', 'age': 25}, {'name': 'Alice', 'age': 30}, {'name': 'Charlie', 'age': 35}]