Python 列表基础操作全解析:增删改查与排序实战

清欢
清欢
发布时间:2026-10-12 | 1人浏览过
原创

Python 列表是最常用的内置数据结构之一,支持动态增删、灵活切片与多级排序。本文按实际开发流程梳理列表的核心操作,涵盖对象引用机制、元素增删策略、分片赋值语法及排序函数的区别,附带精简可运行示例,帮助读者建立清晰的操作认知。

一、列表创建机制与遍历方法

在 Python 中,使用 = 符号赋值仅传递对象的引用而非复制数据。若将列表直接赋值给新变量,两者将指向同一内存地址,修改其一会同步影响另一方。如需独立副本,应使用 list.copy() 或切片 []。

# 引用赋值测试
original = [1, 2, 3]
referenced = original
referenced[0] = 99
print(original)  # 输出: [99, 2, 3],两者地址相同

遍历列表推荐直接使用 for 循环或搭配 enumerate() 获取索引,避免使用冗余的 while 条件判断:

data = [10, 20, 30]
# 基础遍历
for item in data:
    print(item)

# 带索引遍历
for idx, val in enumerate(data):
    print(f"索引: {idx}, 值: {val}")
print("====================================")

二、向列表追加元素

列表提供三种常用追加方式,适用场景各有不同:

第1步:末尾追加单个元素(append)

将对象作为整体添加到列表尾部。适用于逐项收集结果或模拟栈结构。

nums = [0, 2, 3]
nums.append(6)
print(nums)  # 输出: [0, 2, 3, 6]

第2步:合并扩展多个值(extend)

接收一个可迭代对象,将其内部元素逐个追加到原列表末尾。性能优于循环调用 append。

more = [7, 8]
nums.extend(more)
print(nums)  # 输出: [0, 2, 3, 6, 7, 8]

第3步:指定位置插入(insert)

按目标索引偏移后续元素,适合需要严格维持顺序的场景。

nums.insert(1, 1)
print(nums)  # 输出: [0, 1, 2, 3, 6, 7, 8]

三、移除列表元素

根据需求选择销毁引用、弹栈返回或按值查找的方式:

第4步:按索引或切片删除(del)

直接从列表中移除指定索引的元素或范围,不返回值。底层执行内存移动操作。

del nums[0]                # 移除首项
print(nums)  # [1, 2, 3, 6, 7, 8]
del nums[5:7]              # 切片包左不包右,移除索引 5~6
print(nums)  # [1, 2, 3, 6, 8]

第5步:弹出并返回值(pop)

默认移除最后一个元素并返回其值。显式传入索引时可移除任意位置,常用于队列或栈逻辑。

last_val = nums.pop(5)     # 移除末尾元素 8
print(last_val)  # 8
print(nums)  # [1, 2, 3, 6]

第6步:按值首次匹配删除(remove)

搜索列表中第一个等于目标值的项并移除。未找到时会抛出 ValueError,需配合循环处理重复值。

nums.remove(3)
print(nums)  # [1, 2, 6]

四、利用切片进行批量赋值

切片赋值是 Python 独有的列表操作语法,支持原地替换、区间插入与批量清理:

# 1. 覆盖指定范围:从索引 1 起全部替换
data = [1, 3, 6, 9]
data[1:] = [3, 6, 9]
print(data)  # [1, 3, 6, 9]

# 2. 无覆盖插入:通过空区间原位扩展
data[2:1] = [4, 5]
print(data)  # [1, 3, 4, 5, 6, 9]

# 3. 清空中间段:用空列表替换目标切片
batch = [1, 2, 3, 4, 5, 6]
batch[1:5] = []  
print(batch)  # [1, 6]

五、列表反转与排序规则

排序相关函数与方法的底层行为差异较大,使用时需注意作用域:

第7步:原地反转(reverse)

不产生新列表,直接颠倒当前对象顺序。

items = [1, 3, 6, 9]
items.reverse()
print(items)  # [9, 6, 3, 1]

第8步:原地排序(sort)

对原列表进行修改。支持 key 自定义键值与 reverse=True 降序排列。

words = ["hello", "P", "yt", "hon"]
words.sort(key=len)          # 按长度升序
print(words)  # ['P', 'yt', 'hon', 'hello']
words.sort(key=len, reverse=True)
print(words)  # ['hello', 'hon', 'yt', 'P']

第9步:返回新列表(sorted)

接受任意可迭代对象,返回全新排序列表,原数据保持不变。适合需保留原始顺序的场景。

raw = [5, 3, 4, 2, 1]
sorted_asc = sorted(raw)
print(sorted_asc)  # [1, 2, 3, 4, 5]
sorted_desc = sorted(raw, reverse=True)
print(sorted_desc)  # [5, 4, 3, 2, 1]
print(raw)  # [5, 3, 4, 2, 1] 源数据未改变

六、完整参考脚本

以下为整合上述操作的完整可运行示例,便于整体调试与对照学习:

# 初始化与引用说明
src = [1, 2, 3, 4, 5]
ref = src
src[0] = 0  # 共享引用导致双向修改
print("引用共享:", ref)  # [0, 2, 3, 4, 5]

# 遍历演示
tmp = len(src)
i = 0
while i < tmp:
    print(src[i], end=',' if i < tmp-1 else '\n')
    i += 1

# 元素增删综合
test_list = [0, 2, 3]
test_list.append(6)
test_list.extend([7, 8])
test_list.insert(1, 1)
del test_list[0]
del test_list[5:7]
rem_val = test_list.pop(5)
print("Pop返回值:", rem_val)
test_list.remove(3)

# 切片赋值演示
slice_arr = [1, 3, 6, 9]
slice_arr[1:] = [3, 6, 9]
slice_arr[2:1] = [4, 5]
print("分片操作后:", slice_arr)

# 排序逻辑
sort_test = [5, 3, 4, 2, 1]
sort_test.sort(reverse=True)
print("原地降序:", sort_test)
neg_sort = sorted(sort_test, reverse=False)
print("新列表升序:", neg_sort)

以上就是 Python 列表基础操作全解析的详细内容,更多关于 Python 数据结构与进阶用法的资料请关注本站其它相关文章!

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表