Python,从列表中删除元素

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

我的错误是什么?

最佳答案

在 python 2 中可以工作,但在 python 3 中 zip 已成为一个生成器函数:它按需创建项目(更多信息 here 关于各种 zip、izip 内容以及 2 和 2 之间的差异) 3)

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

相关文章:

python - Python中Matlab imfilter的等价函数

c++ - C++ 中 & 的 C 替换

list - 在列表 kotlin 中找不到 RemoveAt?

python - 当列表在 python 中有索引时执行循环

list - Java 8 流与迭代器性能

html - 我怎样才能使用列表制作下拉菜单

python - 如何从 Python 中运行 MATLAB 代码

python - 如何在Python中使用beautifulsoup提取标签之间的文本

python - 使用boto3修改基于标签的Cloud-formation堆栈的终止保护

python - 完成的一些事件在 python 中创建另一个事件