我只是从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]]
答案 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)]