嗨,我是新手,我的功能有问题。 我有两个清单:
>>> 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']
我的错误是什么?
答案 0 :(得分:4)
在python 2中可以工作但是在python 3中zip
已经成为一个生成器函数:它按需创建项目(更多信息here关于各种zip,izip的东西以及2&amp; 2之间的差异。 3)
这意味着,由于您在循环中修改a
和b
,因此相当于对更改列表进行迭代(由于{{1},它稍微不那么明显功能)。
要解决此问题,请压缩输入列表的副本
zip
答案 1 :(得分:0)
我已经在我的python 2.7中运行了原始代码,它实际上输出了您正在寻找的值。但是这里有一个更简洁的版本供您考虑,其中也有诀窍:
def function(a,b):
for i1, i2 in zip(a,b):
if i1 <= i2:
b.remove(i2)
if i2 <= i1:
a.remove(i1)
a = ['a0', 'b1', 'a2', 'b3', 'a4', 'b5']
b = ['b0', 'a1', 'b2', 'a3', 'b4', 'b5']
function(a, b)
print a
>>>['a0', 'a2', 'a4']
print b
>>>['a1', 'a3']