当我正在处理列表时,如何获取当前项的id以引用它以列出方法?
xl = [1,2,3] # initial list
yl = [3,2] # list used to remove items from initial list
for x in xl[:]:
for y in yl:
if x == y:
xl.pop(x) # problem
break
print x, y
print xl
在简单示例中,我想遍历2个列表,当我找到类似的项目时,将其从列表1中删除。
在“#problem”评论的行中我应该使用什么而不是X?
PS:请注意,这是我正在迭代的副本。
答案 0 :(得分:8)
执行此操作的一般方法是使用enumerate
。
for idx, item in enumerate(iterable):
pass
但是对于你的用例,这不是一种非常pythonic的方式来做你似乎正在尝试的东西。应避免迭代列表并同时修改它。只需使用列表理解:
xl = [item for item in xl if item not in yl]
答案 1 :(得分:4)
xl = [x for x in xl if x not in y]
答案 2 :(得分:2)
您应该只使用filter
:
x1 = filter(x1, lambda x: x not in y1)
或者,list comprehension也适用:
x1 = [x for x in x1 if x not in y1]
如果y1非常大,你应该在一个集合中查找,如下所示:
y1set = set(y1)
x1 = filter(x1, lambda x: x not in y1set)
作为参考,pop
采用索引,获取索引的通用方法是enumerate
。但是,几乎在所有情况下,编写代码的方式都比使用索引更简洁。