迭代列表,比较值并删除重复 - Python

时间:2018-06-01 04:07:21

标签: python python-3.x

我很好奇。如何正确迭代列表,比较两个值并删除副本(如果存在)。

这里我创建了一个嵌套的for循环:

my_list =  [ 1, 2, 3, 4, 5 ]
temp = [1, 5, 6]

def remove_items_from_list(ordered_list, temp):
    # Removes all values, found in items_to_remove list, from my_list
        for j in range(0, len(temp)):
                for i in range(0, len(ordered_list)):
                        if ordered_list[i] == temp[j]:
                                ordered_list.remove(ordered_list[i])

但是当我执行我的代码时,我收到一个错误:

  File "./lab3f.py", line 15, in remove_items_from_list
    if ordered_list[i] == items_to_remove[j]:

任何人都可以解释原因吗?

这个问题,我希望我将两个列表相互比较,这些列表有两种不同的长度。如果列表中的项目与列表b中的值匹配,我们希望从列表a中删除它。

4 个答案:

答案 0 :(得分:2)

你实际上可以在迭代它时从列表中删除项目,但通过@ReblochonMasque读取链接。

以下是删除重复项的一种方法:

def remove_items_from_list(ordered_list, temp):
    n = len(ordered_list)
    for i in range(n - 1, -1, -1):
        if ordered_list[i] in temp:
            del ordered_list[i]      

然后

>>> remove_items_from_list(my_list, temp)
>>> print(my_list)
[2, 3, 4]

但是,解决问题的最简单方法之一是使用集合:

list(set(my_list) - set(temp))

使用此方法时,结果列表中的项目顺序可能是任意的。此外,这将创建 new 列表,而不是修改现有列表对象。如果订单很重要 - 请使用列表理解:

[v for v in my_list if v not in temp]

答案 1 :(得分:0)

在迭代循环时,从orderer_list中删除导致索引错误的项 试试这个:

def remove_items_from_list(ordered_list, temp):
    list_ = [x for x in orderer_list if x not in temp]
    return list_

答案 2 :(得分:0)

首先找到重复的元素,然后将其从原始列表中删除。

dup_list = [item for item in temp if item in my_list]

for ele in dup_list:
    my_list.remove(ele)

remove() source

答案 3 :(得分:-1)

您无法从正在迭代的列表中删除项目。您可以创建阵列的副本并从中删除项目。