嗨,我是新手,我在功能方面遇到问题。 我有两个列表:
>>> a = ['a0', 'b1', 'a2', 'b3', 'a4', 'b5']
>>> b = ['b0', 'a1', 'b2', 'a3', 'b4', 'b5']
我想删除相同位置的共同元素和较大元素;我的输出应该是:
>>> function(a,b)
>>> a
['a0', 'a2', 'a4']
>>> b
['a1', 'a3']
我尝试过这个:
>>> def function(a,b):
for i1,i2 in zip(a,b):
if i1 == i2:
a.remove(i1)
b.remove(i2)
elif i1 < i2:
b.remove(i2)
else:
a.remove(i1)
但它返回了我:
>>> function(a,b)
>>> a
['a0', 'b1', 'a2', 'b3', 'a4', 'b5']
>>> b
['a1', 'a3', 'b5']
我的错误是什么?
最佳答案
在 python 2 中可以工作,但在 python 3 中 zip
已成为一个生成器函数:它按需创建项目(更多信息 here 关于各种 zip、izip 内容以及 2 和 2 之间的差异) 3)
这意味着,由于您在循环中修改 a
和 b
,因此它相当于迭代更改列表(由于 zip
函数)。
要解决此问题,请压缩输入列表的副本
def function(a,b):
for i1,i2 in zip(a[:],b[:]):
if i1 == i2:
a.remove(i1)
b.remove(i2)
elif i1 < i2:
b.remove(i2)
else:
a.remove(i1)
关于Python,从列表中删除元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40153411/