Python List 基础与操作详解
本文深入解析 Python 中的 List(列表)数据结构,阐述其作为可变序列的核心特性。内容涵盖列表的创建、索引访问、元素修改、与 Tuple 的转换,以及通过代码示例演示列表支持的加减乘运算、动态参数传递和函数参数传递的影响。同时介绍列表推导式与遍历技巧,帮助开发者掌握 List 的实际应用。
什么是 List?
List 是 Python 中的一种序列类型,用于存储一串有序数据,且支持动态追加元素。
可以将 List 想象为商场内的儿童游乐串串车,它由多节车厢组成,并且可以随时挂接新的车厢(即添加元素)。
相比之下,Tuple(元组)就像是一节节被焊死在一起的串串车,一旦创建便无法更改结构。
在数据结构领域,链表是常见的线性结构,而 Python 的 List 在某种程度上可以视为链表的一种高效实现或类似结构。
List 可以容纳无限数量的数据,并通过从 0 开始的索引(下标)来访问特定位置的元素。
接下来通过代码示例来直观感受 List 的行为:
list_a = [1, 2, 3]
list_b = ['hello','lei','学委', 666]
上述代码展示了 Python 中 List 的基本形态。
List 支持哪些具体操作?
此前在 Tuple 中演示过的加法(+)和乘法(*)运算符,List 是否也能支持?
答案是肯定的,List 完全支持这些操作。
这里沿用之前 Tuple 的代码逻辑进行适当调整:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2021/10/31 10:36 下午
# @Author : LeiXueWei
# @CSDN/Juejin/Wechat: 雷学委
# @XueWeiTag: CodingDemo
# @File : list_demo.py
# @Project : hello
a = [1, 2, 3]
print(a[0])
t = list(a)
print(t[0:2])
print(type(t[0:2]))
# <class 'list'>
t[0] = 22 # list可以修改对应下标的值!
a[0] = 22
mylist = list([a, [2, 3]])
print(mylist)
([22, 2, 3], [2, 3])
mylist[0][0] = 100 #这个可以!真可以!
print(mylist)
print(type(mylist))
动态长度参数传递
def show_info_v2(name, title, *info):
print("姓名为:", name)
print("职称为:", title)
print("其他评价:", info)
show_info_v2('雷学委', '搬砖大师', "热爱技术", "热爱生活")
传递给函数的 List 参数是否会被函数内部修改?
通过以下程序可以验证这一行为:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2021/10/24 11:39 下午
# @Author : LeiXueWei
# @CSDN/Juejin/Wechat: 雷学委
# @XueWeiTag: CodingDemo
# @File : func_call.py
# @Project : hello
def compute_v1(list):
sum = 0
for x in list:
sum += x
list = list + [sum]
print("新地址:", id(list))
return sum
def compute_v2(list):
sum = 0
for x in list:
sum += x
list[0] = list[0] * 100
return sum
_list = [1, 2, 3, 4, 5]
print("调用计算函数v1之前:", _list)
print("调用计算函数v1之前内存地址:", id(_list))
print(compute_v1(_list))
print("调用计算函数v1之后:", _list)
print("调用计算函数v1之后内存地址:", id(_list))
_list = [1, 2, 3, 4, 5]
print("调用计算函数v2之前:", _list)
print("调用计算函数v2之前内存地址:", id(_list))
print(compute_v2(_list))
print("调用计算函数v2之后:", _list)
print("调用计算函数v2之后内存地址:", id(_list))
这是代码运行的实际效果:

由此可见,List 中的元素是可以被直接修改的。
List 对象还能执行哪些其他操作?
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2021/10/31 10:36 下午
# @Author : LeiXueWei
# @CSDN/Juejin/Wechat: 雷学委
# @XueWeiTag: CodingDemo
# @File : list_demo2.py
# @Project : hello
list = [3, 3, 3]
# new_list = list - list #TypeError: unsupported operand type(s) for -: 'listle' and 'listle'
new_list = list + list
print(new_list)
# 学委还是很喜欢三连的,666
new_list = list * 3
print("三连开光过的list:", new_list)
# new_list = list / 3 # 不支持下次一定啊!
print("'666' in new_listle ? ", '666' in new_list)
以下是相关操作的运行结果:

可以看到,List 完整支持了之前在 Tuple 中演示的所有操作。
Tuple 转换为 List
直接通过代码演示转换过程:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2021/10/31 10:36 下午
# @Author : LeiXueWei
# @CSDN/Juejin/Wechat: 雷学委
# @XueWeiTag: CodingDemo
# @File : list_demo2.py
# @Project : hello
mylist = [3, 3, 3]
new_list = [x * 2 for x in mylist]
print("加倍过的list:", new_list)
# 从这里开始展示tuple 转list
tup = (6, 6, 6)
new_list = list(tup)
print("把list转list: ", new_list)
if 6 in new_list:
print("new_list has 6 !")
前面内容似乎遗漏了重要部分:列表的遍历尚未展示。
这部分内容非常简单,代码中已有所体现。
list = [ 1, 2, 3]
for x in list:
do_on_value(x)
实际上,前面的展示代码已经涵盖了遍历逻辑,只是未明确点出。
关键语句是 new_list = [x * 2 for x in mylist],它直接遍历列表并将每个元素的值乘以 2,生成一个新列表。
总结
本文到此结束,希望能为您提供帮助,欢迎继续关注本站的更多内容!
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













