如何将[1,[2,3,4],5]之类的列表转换为列表中的[[1,2,5],[1,3,5],[1,4,5]]蟒蛇?

时间:2019-01-14 19:12:53

标签: python-3.x

我只是从Python开始,试图找到将列表[1,[2,3,4],5]转换为列表[[1,2,5],[1]的一般解决方案,3,5],[1,4,5]]。

我尝试创建一些动态列表,但没有得到我想要的内容,即使示例中也没有此简单列表。任何帮助将不胜感激。

inter_l = []
aba = []
v = [1, [2, 3], 4, 5, 6]
g = globals()

for elem in v:
    if isinstance(elem, (list,)):
        l_ln = len(elem)
        indx = v.index(elem)
        for i in range(0, l_ln):
            g['depth_{0}'.format(i)] = [elem[i]]
            inter_l.append(list(g['depth_{0}'.format(i)]))

    else:
        aba.append(elem)

t = aba.extend(inter_l)
w = aba.extend(inter_l)
print(v)
print(aba)
print(inter_l)
  
    
      

[1,[2,3],4,5,6]
      [1、4、5、6,[2],[3],[2],[3]]
      [[2],[3]]

    
  

1 个答案:

答案 0 :(得分:4)

最简单的方法是利用itertools.product函数,但是由于它希望将可迭代项作为其输入,因此必须对输入进行一些转换。实现这一目标的一种方法是:

transformed = [e if isinstance(e, list) else [e] for e in v]

它将所有非列表元素转换为列表,然后将此transformed输入传递给product

list(itertools.product(*transformed))

请注意,*前面的transformed会将transformed列表扩展为位置参数,因此它的元素列表取代了类型为list的单个参数而是通过了。

整个管道如下所示:

>>> v = [1, [2, 3, 4], 5]
>>> t = [e if isinstance(e, list) else [e] for e in v]
>>> list(itertools.product(*t))
[(1, 2, 5), (1, 3, 5), (1, 4, 5)]