【问题标题】:[New problem raised ]Duplicate elements inside nested list[提出的新问题]嵌套列表中的重复元素
【发布时间】:2021-05-31 19:11:59
【问题描述】:

我有 3 个列表

X1 = ['A','B','C','D']
X2 = ['A','1','2','3']
X3 = ['1','W','X','Y','Z']

我通过迭代来创建列表的所有组合

ALL = [X1,X2,X3]
a = list(itertools.product(*ALL))

输出:

[('A', 'A', '1'), ('A', 'A', 'W'), ('A', 'A', 'X'), ('A', 'A', 'Y'), ('A', 'A', 'Z'), ('A', '1', '1'), ('A', '1', 'W'), ('A', '1', 'X'), ('A', '1', 'Y').......

除了循环列表中的所有元素之外,我可以有另一种方法来擦除列表中的所有重复元素吗?我想要的应该只是

('A', '1', 'W'), ('A', '1', 'X'), ('A', '1', 'Y')....... and so on 

**提出的新问题**

如果这 3 个列表更改为

X1 = ['A_1','B','C','D']
X2 = ['A_2','1_1','2','3']
X3 = ['1_1','W','X','Y','Z']

因为A_1, A_2属于同一个组,我还是想把它们当作重复元素。那么我应该怎么做才能像上面的例子一样删除所有这些重复的元素呢?

【问题讨论】:

  • 为什么('A', 'A', '1') 退出,而('A', '1', '1') 进入?
  • @schwobaseggl 哦,对不起('A','1','1')也出来了。我没有注意到这一点。谢谢!
  • @Sandertjuhh 感谢您的建议,但我没有删除重复列表(实际上根本没有重复列表)。我想要的是删除带有重复元素的特定列表。

标签: python list duplicates combinations nested-lists


【解决方案1】:

您可以使用列表推导来删除这样的元素。

arr = itertools.product(*ALL)
ans = [ele for ele in arr if len(set(ele))==3]

输出:

[('A', '1', 'W'),
 ('A', '1', 'X'),
 ('A', '1', 'Y'),
 ('A', '1', 'Z'),
 ('A', '2', '1'),
  ...

【讨论】:

  • 不需要内存中的虚假列表。 arr = itertools.product(*ALL) 会的!
  • 是的,不需要转换成列表。已更新。
【解决方案2】:

您还可以预处理基本列表以不再包含任何相等的元素,而不是过度生成(可能大量)组合并过滤掉它们:

s = set()
for lst in ALL:
    new_lst = []
    for x in lst:
        if x not in s:
            s.add(x)
            new_lst.append(x)
    lst[:] = new_lst

a = list(itertools.product(*ALL))

根据您的真实数据,这可能会大大减少运行时间。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-06
    • 1970-01-01
    • 1970-01-01
    • 2023-03-22
    相关资源
    最近更新 更多