day 06 列表
认识列表
1 什么是列表(list)
列表是容器数据类型(一个列表可以同时保存多个数据);
将[]作为容器的标志,里面多个元素用逗号隔开:[元素1,元素2,元素3…]
list = [10, 99, 89, 67]
print(list)
2 特点
列表是可变的(可变指列表中元素的个数、元素的值和元素的顺序可变);列表是有序的(每个元素都位置对应的索引值)
[10, 20, 30] -> [10, 20, 30, 40, 50]
[10, 20, 30] -> [20, 30]
[10, 20, 30] -> [100, 20, 30]
[10, 20, 30] -> [20, 10, 30]
3 元素的要求 --没有要求
任何型的数据,灰可以作为列表的元素;而且同一列表可以保存不同类型的数据。
list = [10, 23.4, 'abc', True, None]
print(list)
a = 100
list1 = [a, 200, a + 200, a > 10]
list1 = [
[10, 20, 30, 40],
[1, 2, 3, 4],
[22, 33, 55, 66]
]
print(list1)
列表操作
1 查 获取列表元素
a 查单个 获取一个元素
语法:
列表[] 获取指定下标对应的元素
说明:
列表 任何结果椒列表的表达式,一般用保存列表的变量
[] 固定写法
下标 小标又叫索引,它是有序序列中元素在序列中的位置信息
列表中每个元素灰有两个下标值:一个是从0开始依次增加的下标值(0表示第一个元素,1表示第二个元素)
一个是从-1开始依次减少的下标值(-1表示倒数第一个元素,-2表示倒数第二个元素)
注意:下标不能越界,下标胡有效范围:0~长度-1 和 -1~长度
len(列表) 获取列表中元素的个数(获取列表长度)
b 切片 获取部分元素
完整语法:
列表[开始下标:结束下标:步长]
说明:
开始下标、结束下标 下标值;用来确定切片的有效范围:[开始下标,结束下标)
步长 正整数或者负整数;用正负号来决定获取的方向(正-从前往后取;负-从后往前取),用绝对值来决定获取的时候是否跳着取,跳几个
: 固定写法
获取原理:
a 如果步长对应的方向和开始下标对应胡元素到结束下标对应的元素的方向不一致,切片无效,结果是空列表
b 如果切片有效,先确定有效范围([开始下标,结束下标)),然后在有效范围内根据步长方向按照步长绝对值获取元素,创建新列表
film_names = ['碟中谍', '肖申克的救赎', '霸王别姬', '星际穿越', '阿Q正传', '大话西游', '绿皮书', '这个杀手不太冷']
print('-------------------------------------------')
print(film_names[1:-1:2]) # ['肖申克的救赎', '星际穿越', '大话西游']
print(film_names[4:-2:1]) # ['阿Q正传', '大话西游']
print(film_names[2:4:-1]) # []
print(film_names[6:2:3]) # []
省略语法
列表[开始下标:结束下标:步长]
a 省略步长: 列表[开始下标:结束下标] 省略步长,步长就是1
b 省略开始下标: 列表[:结束下标:步长] 如果步长为正就从第一个元素开始往后取;如果步长为负就从最后一个元素开始往前取
c 省略结束下标:列表[开始下标::步长] 如果步长为正取到最后一个元素为止;如果步长为负取到第一个元素为止
film_names = ['碟中谍', '肖申克的救赎', '霸王别姬', '星际穿越', '阿Q正传', '大话西游', '绿皮书', '这个杀手不太冷']
print(film_names[1:4]) # ['肖申克的救赎', '霸王别姬', '星际穿越']
print(film_names[-2:2]) # []
print(film_names[:-3]) # ['碟中谍', '肖申克的救赎', '霸王别姬', '星际穿越', '阿Q正传']
print(film_names[:-3:-1]) # ['这个杀手不太冷', '绿皮书']
print(film_names[:2:-2]) # ['这个杀手不太冷', '大话西游', '星际穿越']
print(film_names[3:]) # ['星际穿越', '阿Q正传', '大话西游', '绿皮书', '这个杀手不太冷']
print(film_names[3::-1]) # ['星际穿越', '霸王别姬', '肖申克的救赎', '碟中谍']
print(film_names[3::2]) # ['星际穿越', '大话西游', '这个杀手不太冷']
print(film_names[::-1]) # ['这个杀手不太冷', '绿皮书', '大话西游', '阿Q正传', '星际穿越', '霸王别姬', '肖申克的救赎', '碟中谍']
print(film_names[:]) # ['碟中谍', '肖申克的救赎', '霸王别姬', '星际穿越', '阿Q正传', '大话西游', '绿皮书', '这个杀手不太冷']
print(film_names[1:-1]) # ['肖申克的救赎', '霸王别姬', '星际穿越', '阿Q正传', '大话西游', '绿皮书']
遍历 一个一个的取,取完为止
方法一: 直接获取元素
for 元素 in 列表:
(变量依次获取的是列表中的每个元素)
方法二: 先获取元素下标,再根据下标获取元素
for 下标 in range(列表):
变量取到的是元素的下标
方法三:
for 下标,元素 in enumerate(列表):
同时获取列表元素和下标
result = 0
for x in nums:
result += x
print(result)
print('-------------------------------------')
nums = [34, 56, 78, 9, 23]
for x in range(len(nums)):
print(x, nums[x])
print('-------------------------------------')
nums = [34, 56, 78, 9, 23]
for index,item in enumerate(nums):
print(index, item)
增 添加元素
1 列表.append(元素) 在指定列表的最后添加指定元素
2 列表.insert(下标,元素) 在指定下标对应的元素锁芯插入指定元素
nums = [20, 30]
print(nums) # [20, 30]
nums.append(100)
print(nums) # [20, 30, 100]
nums = [100, 200, 300]
print(nums) # [100, 200, 300]
nums.insert(-1, 400)
print(nums) # [100, 200, 400, 300]
nums.insert(0, 1000)
print(nums) # [1000, 100, 200, 400, 300]
例题
nums = [11, 20, 20, 35, 8, 7, 90, 22, 23, 5, 7, 10]
[20, 20, 8, 90, 22, 10]
result = []
for x in nums:
if x % 2 == 0:
result.append(x)
print(result)
删 删除列表元素
1 del 列表[下标] 删除列表中指定下标对应的元素
2 列表.remove(元素) 删除列表中指定元素(如果元素不存在会保存;如果元素有多个只会删除最前面一个)
3 列表.pop() 取出列表最后一个元素,并且返回
列表.pop(下标) 取出列表中指定下标对应的元素,并且返回
nums = [11, 20, 20, 35, 8, 7, 90, 22, 23, 5, 7, 10]
del nums[3]
print(nums) # [11, 20, 20, 8, 7, 90, 22, 23, 5, 7, 10]
nums = [11, 20, 20, 35, 8, 7, 90, 22, 23, 5, 7, 10]
nums.remove(10)
print(nums) # [11, 20, 20, 35, 8, 7, 90, 22, 23, 5, 7]
nums = [11, 20, 35, 8, 7, 90, 22, 20, 23, 5, 7, 10]
x = nums.pop()
print(nums, x) # [11, 20, 35, 8, 7, 90, 22, 20, 23, 5, 7]
x = nums.pop(1)
print(nums, x) # [11, 35, 8, 7, 90, 22, 20, 23, 5, 7]
改 修改元素的值
列表[下标]=新元素
nums = [11, 20, 35, 8, 7, 90, 22, 20, 23, 5, 7, 10]
nums[1] = 200
print(nums) # [11, 200, 35, 8, 7, 90, 22, 20, 23, 5, 7, 10]