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[1] 到 gang[-1] 的 gang 元素

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

问题:为什么会显示此错误?它的潜在修复?有没有更好的方法来实现目标?

巴佩

在这里。你创建一个访问过的列表,向后遍历每个子列表,如果一个元素已经被访问过,就删除它:

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章