01
列表的删
l = [1, 2, 3, "a", "b"]
d1 = l.pop()
d2 = l.pop(2) # 删除下标为2的元素,即删除第3个元素
print(d1) # b
print(d2) # 3
print(l) # [1, 2, 'a']
2. del:删除指定位置的元素,也可以切片删除,没有返回值
l = [1, 2, 3, "a", "b"]
del l[1]
print(l) # [1, 3, 'a', 'b']
del l[:2]
print(l) # ['a', 'b']
3. remove:删除指定的元素
l = [1, 2, 3, "a", "b"]
l.remove(1)
print(l) # [2, 3, 'a', 'b']
l.remove("a")
print(l) # [2, 3, 'b']
4. clear():直接清空整个列表
l = [1, 2, 3, "a", "b"]
l.clear()
print(l) # []
02
列表的改
l = [1, 2, 3, "a", "b"]
# 修改第2个元素的值
l[1] = 666
print(l) # [1, 666, 3, 'a', 'b']
2. 如果是单使用切片,则只是把列表里索引号对应的元素删除,再加入任何的东西,方法和列表的增中的 extend 类似
l = [1, 2, 3, "a", "b"]
# 修改从第二个到第三个的值
l[1:3] = [123, "abc"]
print(l) # [1, 123, 'abc', 'a', 'b']
# 修改从第二个到第三个的值(实际上对应多了一个值)
l[1:3] = [777, 888, 999]
print(l) # [1, 777, 888, 999, 'a', 'b']
# 修改从第二个到第三个的值(实际上对应少了一个值)
l[1:3] = [555]
print(l) # [1, 555, 999, 'a', 'b']
# 注意与上面的区别
l[1:3] = 555 # 报错,提示『只能分配一个可迭代对象』
# 如果切片加了步长,则替换的个数必须一样,否则也会报错
l = [1, 2, 3, "a", "b"]
l[1::2] = [11, 22, 33]
print(l) # 报错
03
列表的其他操作
l = ["q","w","q","r","t","y"]
print(l.count("q")) # 2
# 这里注意 1 和 True 是一样的
t = (1, 3, True)
print(t.count(1)) # 2
print(t.count(True)) # 2
2. index():从列表中找出某个值第一个匹配项的索引位置
# 列表和字符串不同,不能用 find(),只能用 index(),找不到就报错
l = ["q","w","q","r","t","y"]
print(l.index("q")) # 0
print(l.index("abc")) # 报错
######## 使用 index() 的小陷阱 ########
# 列出每个元素及其对应的索引号
l = ["q","w","q","r","t","y"]
# 错误方法:
for i in l:
print(i, l.index(i))
# 运行结果:
q 0
w 1
q 0
r 3
t 4
y 5
# 原因解析:列表中有相同元素时,使用 index 的话
# 找到相同的元素返回的还是第一次找到该元素的索引号
# 正确方法:动态获取列表的元素
for i in range(0, len(l)):
print(l[i], i)
# 运行结果:
q 0
w 1
q 2
r 3
t 4
y 5
3. sort():在原位置对列表进行排序及反向排序
l = [3, 1, 4, 2, 5]
l.sort()
print(l) # [1, 2, 3, 4, 5]
# 反向操作
l = [3, 1, 4, 2, 5]
l.sort(reverse=True)
print(l) # [5, 4, 3, 2, 1]
4. reverse():将列表中的元素反向存放
l = [3, 1, 4, 2, 5] l.reverse() print(l) # [5, 2, 4, 1, 3]
5. 新版本的 Python 中两个列表是可以相加相乘的,形成一个新的列表
l1 = [1, 2] l2 = [3, 4, 5] l3 = l1 + l2 print(l3) # [1, 2, 3, 4, 5] l1 = [1, 2, 3] l2 = l1 * 3 print(l2) # [1, 2, 3, 1, 2, 3, 1, 2, 3]
6. 循环一个列表时的陷阱
######## 把列表中索引号为奇数的元素删掉 ########
l = [11, 22, 33, 44, 55]
# 错误方法:
for i in range(len(l)):
if i % 2 == 1:
l.pop(i)
print(l) # [11, 33, 44]
# 原因解析:循环一个列表时,最好不要改变列表的长度
# 因为这样会影响列表后面元素的索引位置
# 正确方法一:
l = [11, 22, 33, 44, 55]
new_l = []
for i in range(len(l)):
if i % 2 == 0:
new_l.append(l[i])
l = new_l
print(l) # [11, 33, 55]
# 正确方法二:倒叙法——从最后一个开始按条件循环删除列表元素
l = [11, 22, 33, 44, 55]
for i in range(len(l)-1, -1, -1):
if i % 2 == 1:
l.pop(i)
print(l) # [11, 33, 55]
# 正确方法三:直接使用切片
l = [11, 22, 33, 44, 55]
print(l[0::2]) # [11, 33, 55]
注释:本文来自公众号python实用笔记
python培训班:http://www.baizhiedu.com/python2019