- 此问题在此处已有答案**:
(13个答案)
Strange result when removing item from a list while iterating over it(8个答案)
两年前关闭了。
我试着写一个函数,它接受两个列表作为输入:def array_diff(a, b):
。在这个函数中,我想返回一个过滤过的a
列表,它已经移除了列表b
中的所有项目。array_diff([1,2],[1]) == [2]
或者:array_diff([1,2,2,2,3],[2]) == [1,3]
我写了下面的代码:
def array_diff(a, b):
for i in a:
if i in b:
a.remove(i)
return a
但是,即使我没有得到错误,当我尝试运行这个函数时,列表a
有两个值相同的项,并且它出现在列表b
中,它也不能正确地过滤它。我不知道为什么会发生这种情况,但我已经尝试过使用a.pop(i)
,但也没有工作。我还尝试过使用for i in range(len(a))
迭代列表,但是我收到错误消息说我检查了列表的索引。
希望你能帮助我,谢谢!
3条答案
按热度按时间szqfcxe21#
使用列表解析创建一个新列表,其中包含
a
中所有不在b
中的项,如下所示:或者,可以使用
filter
函数过滤掉a
中同时存在于b
中的任何项。mwg9r5ms2#
有一种更简单的方法例如,
sr4lhrrt3#
如果只需要唯一值,则: