【Python】列表
【python】列表
一、创建列表
1 | listname = [element1,element2,element3,element4,element...] |
列表中的元素类型、个数没有限制,但必须是Python支持的数据类型
- 创建空列表
1 | number = [] |
有了list函数,我们可以在里面添加range函数
现在使用range函数创建一系列元素
1 | number = list(range(1,8)) |
- del删除整个列表
1 | numbers = list(range(1,11)) |
二、访问列表
和C语言数组一样
1 | num = number[0] |
切片操作
1 | numbers = list(range(1,11)) |
三、遍历列表
1 | listname=['monday','tuesday','wednesday','thursday','friday'] |
- enumerate函数
如果想给列表中的每一个值配一个下标,可以使用enumerate函数,对listname使用enumerate函数,给listname的每一个值贴一个标签-下标。
注意:此时enumerate函数生成的不是一个列表,返回的是一个惰性迭代器
所谓“惰性”,就是python为了省内存,避免处理大量数据的时候内存溢出。
在这里,numerate函数是一个迭代器,不会一次性生成所有索引—值对,而是在遍历时按需生成。它只是创建了一个状态机,记录了:
当前指向的索引(默认从 0 开始)。
当前操作的序列(函数里面的列表)。
它不会在内存中立刻计算放入所有元组,只有当你真正去“要”数据时(比如通过 for 循环或 next()),它才会现场计算并返回一个元组。它每次只在内存里放 1 行 数据,处理完第 1 行,它就把它从内存里“丢掉”,再计算处理第2行,以此迭代下去。它能让你用极小的内存处理无限大的数据。
我们来看看下面这个代码:
1 | data = enumerate(['a', 'b']) |
numerate函数处理这个列表,负责每个元素贴上一个“索引标签”,会返回一个迭代器。后面赋值给data后,data就变成了一个迭代器变量,跑遍了列表后就用完了。
这里的list函数,负责接收返回值,data就像传送带一样,在第一遍list函数的作用下,传送带上的(下标-元素)一个个被扔进print函数里打印出来,传送带上就没货了。第二遍自然就打印不出来了。
这也反映了迭代器的性质,一遍遍地往后计算,却不能回头。
- 现在展示在for循环中使用
1 | listname = ['monday', 'tuesday', 'wednesday', 'thursday', 'friday'] |
enumerate 每次循环都会吐出一个像 (0, 'monday') 这样的元组。for index, day 会自动把 0 赋值给 index,把 'monday' 赋值给 day。
在这里,为什么不用list()函数?
性能优越:
for循环是一个“精明”的消费者。它每循环一次,才管enumerate要一个值。内存极省:如果你的列表有一百万行,
for循环配合enumerate依然只占用几字节的内存。如果你加了list(),Python 会先在内存里强行挤出空间存下这一百万个元组,然后再开始循环,这简直是性能自杀。
在现实生活中,我们数数通常从 1 开始,而不是从 0 开始。
enumerate允许你通过start参数直接修改起始数字,而不需要手动写index + 1。
1
2 for i, day in enumerate(listname, start=1):
print(f"星期 {i} 是 {day}")
四、增删改列表元素
(一)、添加列表元素
- 使用append函数
仅实现追加一个元素到列表尾部,且只接受一个参数。
语法:listname.append('object')
注意,这个语法没有返回值。
1 | listname = ['monday', 'tuesday', 'wednesday', 'thursday', 'friday'] |
- 使用extend函数
在列表末尾一次性追加另一个序列中的多个值,常用于新列表扩展原来的列表。
语法类似:listname.append('object'),同样没有返回值
1 | workday = ['monday', 'tuesday', 'wednesday', 'thursday', 'friday'] |
- 使用insert函数(无返回值)
1 | listname.insert(index,object) |
index指object要插入的位置
- 使用+号
1 | workday = ['monday', 'tuesday', 'wednesday', 'thursday', 'friday'] |
(二)、修改列表元素
1 | workday = ['monday', 'tuesday', 'wednesday', 'thursday', 'friday'] |
与C语言类似
(三)、删除列表元素
- 使用del语句
在 Python 的内存管理模型中,**变量名(Name)和对象(Object)**是分离的。
变量名:存储在命名空间(Namespace)中的一个标签。
对象:存储在堆内存(Heap Memory)中的实际数据。
当你执行 del x 时,Python 会从当前的命名空间中注销了 x 这个标识符。
也可以删除列表元素
1 | weekdays = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday'] |




