列表和元组
列表删除中的坑
坑一
遍历过程中,执行删除操作,可能导致删除不完全,下标在增加,但删除元素导致列表长度减小,某些元素跳过未删除
解决:创建一个和原列表相同的新列表,遍历新列表,删除原列表
scores = [98, 45, 34, 89, 23, 67, 23, 9, 54, 100, 78]
# scores1 = scores.copy() # scores1 = scores[:]; scores1 = scores *1; scores1 = scores + []
for i in scores[:]:
if i < 60:
scores.remove(i)
print(scores)
坑二 用len()获取下标去删会报错越界
scores = [98, 45, 34, 89, 23, 67, 23, 9, 54, 100, 78]
index = 0
while index < len(scores):
s = scores[index]
if s < 60:
scores.pop(index)
else:
index += 1
print(scores)
列表的切片
列表切片 - 获取列表中的部分元素(一次性获取多个元素)
1.基本语法
语法:
列表[开始下标:结束下标:步长] - 前闭后开,每次下标值增加步长
注意:
1) 列表切片的结果一定是列表
2) 结束下标对应的元素一定取不到
3)
a.如果步长为正,表示从前往后取,这个时候开始下标对应的元素必须在结束下标对应的元素前面,否则返回[]
b.如果步长为负,表示从后往前取,这个时候开始下标对应的元素必须在结束下标对应的元素后面,否则返回[]
list1 = [23, 45, 67, 89, 45, 68, 33]
print(list1[1:4:1]) # [45, 67, 89]
print(list1[0:6:2]) # [23, 67, 45]
print(list1[3:3:1]) # []
print(list1[1:4:1]) # []
print(list1[1:-1:-1]) # []
print(list1[-2:1:-2]) # [68, 89]
2.切片省略
- 省略步长
列表[开始下标:结束下标] - 省略步长,步长就是1: 列表:[开始下标:结束下标:1] - 省略开始下标
列表[:结束下标:步长]
步长为正:从第一个元素开始往后取(相当于开始下标为0)
步长为负:从最后一个元素开始往前取(相当于开始下标为-1) - 省略结束下标
列表[开始下标::步长] - 省略结束下标
步长为正:从开始下标开始往后取,取到最后一个元素为止
步长为负:从开始下标开始往前取,取到第一个元素为止
fruits = ['苹果', '香蕉', '猕猴桃', '橘子', '石榴', '葡萄']
print(fruits[:4]) # ['苹果', '香蕉', '猕猴桃', '橘子']
print(fruits[:3:-2]) # ['葡萄']
print(fruits[0::]) # ['苹果', '香蕉', '猕猴桃', '橘子', '石榴', '葡萄']
print('python'[::-1]) # 'nohtyp'
列表的相关操作
1.加法运算和乘法运算
1) 加法:列表1+列表2 - 合并两个列表产生一个新的列表
list1 = [10, 20, 30]
list2 = [100, '数学']
list3 = list1 + list2
print(list3)
注意:列表只能和列表相加
print(list1 + 100) # TypeError: can only concatenate list (not "int") to list
2)乘法: 列表*N /N *列表 - 将列表中的元素重复N次产生一个新的列表
2.比较运算
两个列表之间支持比较大小和相等
1) 两个列表比较大小
比较第一对不相等的元素的大小,谁大对应的列表就大
两个列表的元素类型不同不能相互比较大小
2) 比较相等
元素顺序的列表不相等
3. in 和 not in
元素 in 列表 - 判断列表中是否存在指定的元素
元素 not in 列表 - 判断列表中是否不存在指定的元素
A = [1, 2, 5, 10, 3, 2]
B = [5, 2, 10, 20, 32, 2]
C = []
for i in A:
if i in B:
if i not in C:
C.append(i)
print(C)
4.相关函数
sum、max、min、sorted、len、list
-
sum(数字列表) - 求列表中所有元素的和
-
max(列表)/min(列表) - 求列表中元素的最大/最小值(注意:列表中元素的类型必须一致,并且元素本身支持比较运算)
sorted(列表) - 将列表中的元素从小到大排序(升序排序),产生一个新的列表(不会修改原列表)
sorted(列表, reverse=True) - 将列表中的元素从大到小排序(降序),产生一个新的列表(不会修改原列表)
-
len(列表) - 获取列表长度(列表中元素的个数)
-
list(数据) - 将指定数据转换为列表(数据必须是序列:转换的时候直接将序列中的元素作为新的列表)
列表相关方法
1.列表.clear() - 清空指定列表
names = ['犬夜叉', '火影忍者','海贼王']
names.clear()
print(names) # []
2.列表.copy() - 复制指定列表产生一个一模一样的新列表(地址不同)
copy是对列表进行浅拷贝
3.列表.count(元素) - 统计指定元素在列表中出现的次数
nums = [23, 89, 10, 89, 10, 6, 85]
print(nums.count(10))
4.列表.extend(序列) - 将序列中所有的元素全部添加到列表中
names = [‘犬夜叉’, ‘火影忍者’,‘海贼王’]
names.extend(‘abc’)
print(names) # [‘犬夜叉’, ‘火影忍者’, ‘海贼王’, ‘a’, ‘b’, ‘c’]
5.列表.index(元素) - 获取指定元素在列表中的下标(返回的是0开始的下标值)
如果元素不存在指定列表中会报错
如果当前列表中有多个相同元素,只取第一个下标值
names = ['犬夜叉', '火影忍者', '海贼王']
print(names.index('犬夜叉')) # 0
6.列表.reverse() - 列表倒序
names = ['犬夜叉', '火影忍者', '海贼王']
names.reverse()
print(names) # ['海贼王', '火影忍者', '犬夜叉']
7.列表.sort()
列表.sort() - 将列表中的元素从小到大排序(不会产生新的列表)
列表.sort(reverse=True) - 将列表中的元素从大到小排序(不会产生新的列表)
nums = [23, 89, 10, 89, 10, 6, 85]
nums.sort()
print(nums) # [6, 10, 10, 23, 85, 89, 89]