在Python中处理列表列表[重复]

Posted

技术标签:

【中文标题】在Python中处理列表列表[重复]【英文标题】:Processing lists of list in Python [duplicate] 【发布时间】:2020-02-06 00:05:34 【问题描述】:

一直在思考和尝试如何将列表列表转换为多个列表。

比如下面的list列表:

['RZ', ['backho'], ['forest', 'arb']]

应该根据元素的最大长度转换为n-lists,因此由于第三个元素的长度,这会导致两个列表:

['RZ', 'backho', 'forest']
['RZ', 'backho', 'arb']

列表列表中的每个元素都表示为该元素选择的可能性。

【问题讨论】:

你的意思是结果应该是笛卡尔积吗? @schwobaseggl 请重新打开,这个问题可不是扁平化那么简单。 import itertools; [list(sublist) for sublist in itertools.product(*input)] 会做你想做的事吗? @Bjartr 不,它没有,因为RZ 不在list 内。否则,它会。 @JuanPerez 您能否再解释一下输入列表的格式是什么?看起来'RZ'['backho'] 受到同等对待。例如应该发生什么[0, [1], [2, 3], [4, 5, 6]]? 【参考方案1】:

你可以使用itertools.product:

from itertools import product

lst = ['RZ', ['backho'], ['forest', 'arb']]
res = [list(p) for p in product([lst[0]], *lst[1:])]

print(res) # [['RZ', 'backho', 'forest'], ['RZ', 'backho', 'arb']]

【讨论】:

或:res = [list(p) for p in product(*[x if isinstance(x, list) else list(x) for x in lst])] 这样简单的str 可以在任何地方。【参考方案2】:
import itertools
for el in itertools.product(*['RZ', ['backho'], ['forest', 'arb']]):
    print(list(el))

并给出:

['R', 'backho', 'forest']
['R', 'backho', 'arb']
['Z', 'backho', 'forest']
['Z', 'backho', 'arb']

或者如果你想要一个列表列表:

[list(el) for el in itertools.product(*['RZ', ['backho'], ['forest', 'arb']])]

【讨论】:

以上是关于在Python中处理列表列表[重复]的主要内容,如果未能解决你的问题,请参考以下文章

Python连接列表[重复]

python中删除列表中的重复内容

组合列表中的元素:似乎python以两种不同的方式处理同一个项目,我不知道为啥[重复]

在Python中修改列表中的列表[重复]

没有“for”的列表理解[重复]

在python中组合列表列表(类似于string.join但作为列表理解?)[重复]