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
常见问题就两个:
- 直接打印enumerate对象看不到数据:它返回的是迭代器,需要遍历或转成list
e = enumerate(fruits)
print(e) # <enumerate object at 0x...>
print(list(e)) # [(0, 'apple'), (1, 'banana'), (2, 'cherry')]
- 修改原数据时索引错乱:不要在遍历时增删列表元素
# 错误示例
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 只有引用,修改的就是本体。
谢谢!

