Python 3.x 如何对嵌套列表进行排序,以获得包含唯一元素的可能结果列表?

Python 3.x 如何对嵌套列表进行排序,以获得包含唯一元素的可能结果列表?,python-3.x,performance,combinations,Python 3.x,Performance,Combinations,给定嵌套列表,请执行以下操作: a = [[1, 5, 100], [2], [2, 100]] 所需的结果如下所示: [[1, 2, 5], [1, 2, 100], [5, 2, 100], [100, 2, 5]] 这是我的代码,但它没有给出所需的输出。我无法取得进一步进展: arr = [[i] for i in a[0]] def poss(j, arr, tmp): for i in range(len(tmp)): arr[

给定嵌套列表,请执行以下操作:

a = [[1, 5, 100],
     [2],
     [2, 100]]
所需的结果如下所示:

[[1, 2, 5], [1, 2, 100], [5, 2, 100], [100, 2, 5]]
这是我的代码,但它没有给出所需的输出。我无法取得进一步进展:

arr = [[i] for i in a[0]]

def poss(j, arr, tmp):

     for i in range(len(tmp)):
          arr[i] = tmp[i] + [j]
     print(arr)

for i in a[1:]:
     tmp = [k for k in arr] # deepcopy of arr
     
     for j in i:
          poss(j, arr, tmp)
上述代码的输出:

[[1, 2], [5, 2], [100, 2]]
[[1, 2, 5], [5, 2, 5], [100, 2, 5]]
[[1, 2, 100], [5, 2, 100], [100, 2, 100]]

我也觉得这段代码在大数据上效率很低,是吗?我正在寻找更好的代码来获得结果。

这个问题可以通过使用python的itertools模块来解决。 函数的作用是:返回给定集合的所有可能子集,而不重复元素

import math
import itertools

a = [[1, 5, 100],
     [2],
     [2, 100]]

dimx = max([len(el) for el in a])

uniqueEls={}
for el in a:
    for subel in el:
        uniqueEls[subel] = uniqueEls.get(subel,0)

desiredArr= [list(x) for x in list(itertools.combinations(uniqueEls.keys(), dimx))]
print(desiredArr)
[1,5100],[1,5,2],[1100,2],[5100,2]]


您在哪里确定所有子列表一次应该有3个元素?太棒了!我不熟悉iTertools模块。我知道不使用这个工具是愚蠢的。但我想知道如何使用SimpleFor循环和if语句来实现它。这个链接可能会对您有所帮助。如果你觉得答案有帮助,请投票表决。