列表(list)
列表概览
列表(list)也是最常用的 Python 数据类型之一,它以一个方括号内包含多个其他数据项(字符串,数字等甚至是另一个列表),数据项间以逗号作为分隔的数据类型。
# 定义列表
list1 = ['a','b','c','a']
print(list1)
# 输出结果
['a', 'b', 'c', 'a']
list1.append('a')
print(list1)
# 输出结果
['a', 'b', 'c', 'a', 'a']
# 移除指定元素 不会全部移除 只会移除最后一个
list1.remove('a')
print(list1)
# 输出结果
['b', 'c', 'a', 'a']
# 默认移除最后一个数组
list1.pop()
print(list1)
#输出结果
['b', 'c', 'a']
# 再次移除
list1.pop()
print(list1)
# 输出结果
['b', 'c']
# 移除数组如果原list为空 会报错
list1 = []
list1.pop()
print(list1)
# 输出结果
Traceback (most recent call last):
File "f:\rgzn\Python\demo_list.py", line 12, in <module>
list1.pop()
IndexError: pop from empty list
扩展1 - 指定下标插入数据
# 指定的下标插入数据
my_list = [1, 2, 3, 4, 5]
my_list.insert(1,'a')
print(my_list)
扩展2 - 列表删除 pop 与 del
my_list = ['1', '2', '3', '4', '5']
# 0表示 删除第一个元素
my_list.pop(0)
print(my_list)
my_list = [1, 2, 3, 4, 5]
# -1表示 删除最后一个元素 , 删除后原列表会变为删除指定元素后的列表, 返回删除的元素
new_list = my_list.pop(-1)
# 原列表改变
print(my_list)
# 返回值为删除的元素
print(new_list)
# 列表的删除功能
my_list = ['1', '2', '3', '4', '5']
# 删除指定下标的元素
del my_list[0]
print(my_list)
# ['2', '3', '4', '5']
# 通过切片删除指定元素 删除索引 1 到 2 的元素(不包括索引 3)
del my_list[1:3]
print(my_list)
# ['2', '5']
扩展3-列表排序
#列表排序功能
# **列表的排序功能 - 如果列表的数据类型 不统一 则会报错 , 切记使用排序功能时一定要保持内的元素只能为 int 或者 str 否则需要先做数据转换**
my_list = [1,4,2,'a',3,'b',9,'-1']
my_list.sort()
print(my_list)
# 输出 Traceback (most recent call last):
# File "f:\rgzn\Python\demo_list.py", line 46, in <module>
# my_list.sort()
#TypeError: '<' not supported between instances of 'str' and 'int'
sorted_list = sorted(my_list)
print(sorted_list)
# 输出 Traceback (most recent call last):
# File "f:\rgzn\Python\demo_list.py", line 46, in <module>
# my_list.sort()
#TypeError: '<' not supported between instances of 'str' and 'int'
# 针对以上情况可以考虑用 列表推导式 进行类型转化
my_list_str = [str(item) for item in my_list]
print(my_list_str)
# 输出 ['1', '4', '2', 'a', '3', 'b', '9', '-1']
my_list_str.sort() # 默认为升序
print(my_list_str)
# 输出 ['-1', '1', '2', '3', '4', '9', 'a', 'b']
my_list_str.sort(reverse=True)# 降序
print(my_list_str)
# 输出 ['b', 'a', '9', '4', '3', '2', '1', '-1']
# 排序方式2 : 使用sorted()函数进行排序处理,不会改变原数组, 返回排序后的新数组
# 升序
sorted_list = sorted(my_list_str)
print(sorted_list)
# 输出 ['-1', '1', '2', '3', '4', '9', 'a', 'b']
# 降序
sorted_list = sorted(my_list_str,reverse=True)
print(sorted_list)
# ['b', 'a', '9', '4', '3', '2', '1', '-1']
扩展4-双列表操作
# 合并
# 合并列表最简单的方式是使用+ 或者 extend()方法
list1 = [1, 2, 3]
list2 = [4, 5, 6]
# 方式1 使用 + 操作符
merged_list = list1 + list2
# 方式2 使用 extend()方法
list1.extend(list2)
print(merged_list)
# 输出 [1, 2, 3, 4, 5, 6]
print(list1)
# 输出 [1, 2, 3, 4, 5, 6]
# 总结: + 与 extend() 均可操作合并列表
# extend() 会直接在第一个列表增加列表二的数据,改变了原列表的值
# + 操作符合并时,需要使用新的参数接收合并的结果 可以保证原列表数据不会改变
# 故需要根据实际业务场景来选择具体方式
# 交集
list1 = [1, 2, 3, 4]
list2 = [3, 4, 5, 6]
intersection = list(set(list1) & set(list2))
print(intersection)
# 输出[3, 4]
list1 = [1, 2, '3', 4]
list2 = [3, 4, 5, 6]
intersection = list(set(list1) & set(list2))
print(intersection)
# 输出[4]
# 总结: Python标准库中没有直接计算列表交集的函数,但可以使用集合(set)来实现。
# 注意: 列表计算交集是,注意元素的类型,值相同 也不相同, 数字3 与 字符串 '3' 不同,
# 故实际业务场景中的列表做交集处理时,必须考虑元素的类型一致,若不一致需要先做转化(参考 列表递等式)
# 差集
list1 = [1, 2, 3, 4]
list2 = [3, 4, 5, 6]
difference = list(set(list1) - set(list2))
print(difference)
# 输出[1, 2]
# 总结 差集 是指 list1元素 不在 list2中的元素
# 计算差值需要注意实际场景, 具体是差集 还是 对称差集(两个列表不同时存在两个列表中的元素)
# 上述例子中: 差值是 1,2 对称差集为 1,2,4,6
# 并集
list1 = [1, 2, 3, 4]
list2 = [3, 4, 5, 6]
union = list(set(list1)|set(list2))
print(union)
# 输出 [1, 2, 3, 4, 5, 6]
# 总结 并集计算是,如果 两个list的元素重复 则 会自动去重
# 元素中 3 与 '3' 是两个不同的元素
# 对称差集
list1 = [1, 2, 3, 4]
list2 = [3, 4, 5, 6]
symmetric_difference = list(set(list1)^set(list2))
print(symmetric_difference)
# 输出 [1, 2, 5, 6]
# 总结 对称差集是存在于一个列表中但不同时存在于两个列表中的元素。
# 根据实际场景区别差集与对称差集
# 元素映射
list1 = [1, 2, 3]
list2 = [4, 5, 6]
# ---将两个元素相加
# 方式1 : for 的 等价写法
mapped_list = []
index = 0
for value in list1:
mapped_list.append(value+list2[index])
index += 1
print(mapped_list)
# 方式2 : 使用zip 与 列表推导式
mapped_list = [a + b for a, b in zip(list1, list2)]
print(mapped_list)
# python的语法非常优雅,很短的代码可以完成很强大的功能
# zip(list1, list2) 返回为 [(1,4),(2,5),(3,6)] # 是迭代器
# 推导式for返回每组的数据再加上两值 返回一个新的数组
# 使用zip时 如果两个列表的长度不同会自动停留短的列表末尾
list1 = [1, 2, 3]
list2 = [4, 5]
mapped_list = [a + b for a, b in zip(list1, list2)]
print(mapped_list)
# 输出 [5, 7]
# 因为 list2 的长度为2 list1长度为3 zip时会按照 list2的长度2来进行处理,
# 如果需要处理长度不同的列表 需要编写额外的逻辑处理
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构