首页 > 解决方案 > python程序从嵌套列表中删除重复元素

问题描述

我是堆栈溢出的新手,所以如果我不清楚,请原谅。

目标:编写一个程序,删除前面嵌套列表中存在的元素

这是列表: gang=[[1], [7], [11], [13], [2, 4, 6, 8, 10, 12, 14], [3, 6, 9, 12, 15], [6, 12], [5, 10, 15]]

所需的输出:gang=[[1], [7], [11], [13], [2, 4, 6, 8, 10, 12, 14], [3, 6, 9, 15], [5, 10]]

试图:

for i in range(1,len(gang)):
    elem=gang[i]
    for j in range(len(elem)):
        for hey in range(i):
            if elem[j] in gang[hey]:
                elem.pop(j)

尝试的解释:

1)遍历列表帮派,我使用了一个for循环(范围是1,len(gang)bcs第0个元素不会改变,因为它是列表中的第一个)

2)我已经声明了一个变量,'elem',它等同于 gang[i],即 gang 的元素从 gang[1] 到 gang[-1]

3)现在,要遍历元素的元素,即每个嵌套列表的元素,我使用了另一个 for 循环

4) 使用最后一个 for 循环 (for hey in range(i)) 以便我可以确认 elem[j] 即嵌套列表的元素是否存在于前面的嵌套列表中,如果满足条件,elem[j] 将被移除

预期输出:

gang=[[1], [7], [11], [13], [2, 4, 6, 8, 10, 12, 14], [3, 6, 9, 15], [5, 10]]

输出:

if elem[j] in gang[hey]:
IndexError: list index out of range

问题:为什么会出现这个错误?潜在的解决方法?有没有更好的方法来实现目标?

标签: python

解决方案


这里是。您创建一个访问过的列表,向后遍历每个子列表,并删除已访问过的元素:

gang=[[1], [7], [11], [13], [2, 4, 6, 8, 10, 12, 14], [3, 6, 9, 12, 15], [6, 12], [5, 10, 15]]
visited = []
for lst in gang:
    for i in range(len(lst)-1, -1, -1):
        if lst[i] not in visited:
            visited.append(lst[i])
        else:
            lst.pop(i)
print(gang)
#[[1], [7], [11], [13], [2, 4, 6, 8, 10, 12, 14], [3, 9, 15], [], [5]]

推荐阅读