Python,从列表中删除元素

时间:2016-10-20 11:40:03

标签: python list

嗨,我是新手,我的功能有问题。 我有两个清单:

>>> 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']

我的错误是什么?

2 个答案:

答案 0 :(得分:4)

在python 2中可以工作但是在python 3中zip已经成为一个生成器函数:它按需创建项目(更多信息here关于各种zip,izip的东西以及2&amp; 2之间的差异。 3)

这意味着,由于您在循环中修改ab,因此相当于对更改列表进行迭代(由于{{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']