在 Python 中,列表(list)是一种非常灵活的数据结构,可以用来存储一系列的元素。以下是列表的一些常见操作:
文章目录
- 创建列表
- 访问元素
- 修改元素
- 列表切片
- 添加元素
- 删除元素
- 列表推导式
- 其他操作
- pop
- 基本用法
- 指定索引
- 使用场景
- 示例
- 列表的排序
- `list.sort()` 方法
- `sorted()` 函数
- 自定义排序规则
- 实操
- .sort
- sorted()
创建列表
my_list = [1, 2, 3, 4, 5]
访问元素
- 通过索引访问:
first_element = my_list[0] # 第一个元素
last_element = my_list[-1] # 最后一个元素
修改元素
- 直接通过索引修改:
my_list[0] = 10
列表切片
- 获取列表的一部分:
sub_list = my_list[1:4] # 包含索引1到3的元素,不包含索引4
添加元素
- 在末尾添加一个元素:
my_list.append(6)
- 在指定位置插入一个元素:
my_list.insert(1, 7) # 在索引1的位置插入7
- 扩展列表,将一个列表的所有元素添加到另一个列表末尾:
my_list.extend([8, 9, 10])
删除元素
- 删除指定位置的元素:
del my_list[0]
- 移除列表中第一个匹配的元素:
my_list.remove(3)
- 弹出列表末尾的元素:
last_element = my_list.pop()
列表推导式
- 快速生成列表:
squared = [x**2 for x in my_list]
其他操作
- 获取列表长度:
length = len(my_list)
- 列表排序:
my_list.sort() # 默认升序
my_list.sort(reverse=True) # 降序
- 反转列表:
my_list.reverse()
- 复制列表:
my_list_copy = my_list.copy()
- 列表相加:
combined_list = my_list + [11, 12, 13]
- 检查元素是否在列表中:
is_in_list = 5 in my_list
- 计算元素在列表中出现的次数:
count = my_list.count(2)
这些操作涵盖了列表的大部分常用功能。列表在 Python 编程中非常常用,因此理解这些操作非常重要。
pop
在 Python 中,pop()
是列表(list)的一个内置方法,用于移除列表中的一个元素(默认是最后一个元素),并且返回该元素的值。
以下是 pop()
方法的一些关键点:
基本用法
- 移除并返回列表中的最后一个元素:
my_list = [1, 2, 3, 4, 5]
last_element = my_list.pop() # 返回 5,my_list 现在是 [1, 2, 3, 4]
指定索引
pop()
方法还可以接受一个整数参数,该参数指定要移除元素的索引:
second_element = my_list.pop(1) # 返回 2,my_list 现在是 [1, 3, 4]
如果提供的索引超出了列表的范围,Python 将引发一个 IndexError
。
使用场景
- 当你需要从列表中删除一个元素,并且还需要使用该元素时。
- 当你需要实现一个基于列表的栈(stack)时,
pop()
方法非常适合用来移除栈顶元素。
示例
下面是一个使用 pop()
方法的完整示例:
# 定义一个列表
my_list = ['a', 'b', 'c', 'd']
# 移除并返回最后一个元素
popped_element = my_list.pop()
print(f"移除的元素是:{popped_element}") # 输出: 移除的元素是:d
print(f"列表现在是:{my_list}") # 输出: 列表现在是:['a', 'b', 'c']
# 移除并返回指定索引的元素
popped_element = my_list.pop(1)
print(f"移除的元素是:{popped_element}") # 输出: 移除的元素是:b
print(f"列表现在是:{my_list}") # 输出: 列表现在是:['a', 'c']
在使用 pop()
方法时,需要注意,如果列表为空,即没有任何元素,调用 pop()
将会引发 IndexError
。如果不想在空列表上调用 pop()
时引发错误,可以提供一个默认值作为 pop()
的第二个参数,这样在列表为空时将返回这个默认值。这个特性是在 Python 3.9 中引入的。例如:
empty_list = []
element = empty_list.pop(0, '默认值') # 返回 '默认值'
列表的排序
在 Python 中,列表(list)提供了多种排序方法,可以按照不同的标准对列表中的元素进行排序。以下是一些常用的列表排序方法:
list.sort()
方法
sort()
方法是对列表本身进行排序,即它会改变原列表的顺序。
- 基本排序:
my_list = [3, 1, 4, 1, 5, 9]
my_list.sort()
print(my_list) # 输出: [1, 1, 3, 4, 5, 9]
- 降序排序:
my_list.sort(reverse=True)
print(my_list) # 输出: [9, 5, 4, 3, 1, 1]
- 使用
key
参数进行自定义排序:
my_list = ['apple', 'banana', 'cherry', 'date']
my_list.sort(key=len)
print(my_list) # 输出: ['date', 'apple', 'banana', 'cherry']
sorted()
函数
sorted()
函数返回一个新的列表,包含所有排序后的元素,原列表保持不变。
- 基本排序:
my_list = [3, 1, 4, 1, 5, 9]
sorted_list = sorted(my_list)
print(sorted_list) # 输出: [1, 1, 3, 4, 5, 9]
- 降序排序:
sorted_list = sorted(my_list, reverse=True)
print(sorted_list) # 输出: [9, 5, 4, 3, 1, 1]
- 使用
key
参数进行自定义排序:
my_list = ['apple', 'banana', 'cherry', 'date']
sorted_list = sorted(my_list, key=len)
print(sorted_list) # 输出: ['date', 'apple', 'banana', 'cherry']
自定义排序规则
如果需要更复杂的排序规则,可以传递一个自定义的函数给 key
参数:
# 假设有一个包含元组的列表,元组包含姓名和年龄
people = [('Alice', 30), ('Bob', 25), ('Cindy', 35)]
# 按年龄排序
people.sort(key=lambda person: person[1])
print(people) # 输出: [('Bob', 25), ('Alice', 30), ('Cindy', 35)]
在使用排序方法时,需要注意以下几点:
sort()
方法没有返回值,它直接在原列表上进行排序。sorted()
函数返回一个新的列表,原列表不受影响。- 排序默认是升序,可以通过设置
reverse=True
来实现降序排序。 key
参数接受一个函数,该函数用于指定排序的依据。- 对于不可比较的元素(如不同类型的元素混合在一起),直接排序可能会引发
TypeError
。
实操
lst = ['hello', 'world', 'python']
print('原列表:', lst, id(lst)) # id能输出内存地址
# 增加元素的操作
lst.append('sql')
print('增加元素之后:', lst, id(lst)) # 内存地址不变# 使用insert(index, x)在指定的index位置插入元素x
lst.insert(1, 100)
print(lst)# 列表元素的删除操作
lst.remove('world')
print(lst)# pop(index)根据索引将元素取出,然后再删除
print(lst.pop(1))
print(lst)# 清楚列表中所以的元素——clear()
# lst.clear() ctrl+?全部注释
# print(lst, id(lst))# 列表的反向输出
lst.reverse() # 不会产生新的列表,是再原列表的基础上进行的
print(lst)# 列表的拷贝,将产生一个新列表
new_lst = lst.copy()
print(lst, id(lst))
print(new_lst, id(new_lst)) # 新的id# 列表元素的修改操作
lst[1] = 'mysql'
print(lst)
.sort
lst = [4, 56, 3, 78, 40, 56, 89]
print('原列表:', lst)# 排序,默认升序
lst.sort()
print('升序:', lst) # 在原列表的基础上排序,不会产生新列表lst.sort(reverse=True)
print('降序:', lst)# 字母排序
lst2 = ['banana', 'apple', 'Cat']
print('原列表:', lst2)
# 升序排序,先排大写在小写ascll码
lst2.sort()
print('升序:',lst2)lst2.sort(reverse=True)
print('降序:', lst2)# 自定义排序规则,忽略大小写比较
lst2.sort(key=str.lower)
sorted()
lst = [4, 56, 3, 78, 40, 56, 89]
print('原列表:', lst)# 排序 产生新列表,不会对原列表进行排序操作
asc_lst = sorted(lst)
print('升序:', asc_lst)
print('原列表:', lst)# 降序
desc_lst = sorted(lst, reverse=True)
print('降序:', desc_lst)
print('原列表:', lst)# 字母排序
lst2 = ['banana', 'apple', 'Cat']
print('原列表:', lst2)# 忽略大小写进行排序
new_lst2 = sorted(lst2, key=str.lower)
print('原列表:', lst2)
print('排序后的列表:', new_lst2)