Python中enumerate()函数的具体用法和常见问题求助

l = [[500, 2], [200, 5], [100, 10], [40, 25]]

for k, v in enumerate(l): if v[0] - v[1] != 15: del l[k]

print(l) # [[200, 5], [40, 25]]

为什么这个输出的结果和我想象中的不一样,不是应该只输出 [ [ 40,25 ] ] 吗?


Python中enumerate()函数的具体用法和常见问题求助
3 回复

enumerate() 这玩意儿就是给可迭代对象加个索引,变成 (索引, 元素) 的元组。直接上代码最清楚:

# 基础用法:遍历列表同时拿到索引
fruits = ['apple', 'banana', 'cherry']
for index, fruit in enumerate(fruits):
    print(f"第{index}个水果是:{fruit}")
# 输出:
# 第0个水果是:apple
# 第1个水果是:banana
# 第2个水果是:cherry

# 指定起始索引(默认从0开始)
for idx, item in enumerate(fruits, start=1):
    print(f"第{idx}项:{item}")
# 输出:
# 第1项:apple
# 第2项:banana
# 第3项:cherry

常见问题就两个:

  1. 直接打印enumerate对象看不到数据:它返回的是迭代器,需要遍历或转成list
e = enumerate(fruits)
print(e)  # <enumerate object at 0x...>
print(list(e))  # [(0, 'apple'), (1, 'banana'), (2, 'cherry')]
  1. 修改原数据时索引错乱:不要在遍历时增删列表元素
# 错误示例
items = ['a', 'b', 'c']
for i, v in enumerate(items):
    if v == 'b':
        items.pop(i)  # 这会导致后续索引全部错乱!

总结:需要索引时就用enumerate,比range(len())更Pythonic。


因为删除一个之后 k 加 1 了,但是同时 l 也变化了。python 的 list 只有引用,修改的就是本体。

谢谢!

回到顶部