代码在这里,它删除列表中的一些元素。 在循环条件下zip和枚举有什么区别? 似乎枚举产生了错误的结果。
def delete(elem_l, del_e):
n_del = 0
for e, i in zip(elem_l, range(len(elem_l))):
# for i, e in enumerate(elem_l):
print "cycle:", i, "elem:", elem_l[i - n_del], "len:", len(elem_l)
if e == del_e:
del elem_l[i - n_del]
n_del += 1
elem_list = [1, 2, 3, 4, 3, 5, 5, 4, 3]
delete(elem_list, 3)
答案 0 :(得分:2)
这里有问题的是你对zip()
function的使用。它会生成一个列表元组预先。您创建了添加了数字的原始列表的副本。来自文档:
此函数返回元组列表,其中 i -th元组包含每个参数序列中的 i -th元素或者迭代。
强调我的。
因此,更改循环中的elem_l
不会影响循环迭代计数。
enumerate()
生成索引 on demand ,并且当删除elem_l
列表时,生成的元素更少。如果您制作了elem_l
的副本,则会获得相同的结果:
for i, e in enumerate(elem_l[:]):
其中[:]
标识切片生成一个新列表,独立于原始elem_l
列表,然后从循环中删除。