解压列表列表列表
Unpacking a list of list of list
我在程序中使用的当前输入是坐标列表的列表:
data = [["D_02", "10", "10", "20"],
["X_03", "10", "10", "20"]]
为了方便使用,我也希望能够传递一个list of list:
have
:
data = [[["B_01"], ["10"], ["10", "20"], ["10", "20"]],
["D_02", "10", "10", "20"],
["X_03", "10", "10", "20"]]
然后可以将其“分解”成如下所示:
want
:
data = [["B_01", "10", "10", "10"],
["B_01", "10", "10", "20"],
["B_01", "10", "20", "10"],
["B_01", "10", "20", "20"],
["D_02", "10", "10", "20"],
["X_03", "10", "10", "20"]]
我知道可以使用 itertools
包的 product
函数对列表列表执行此操作:
import itertools
list(itertools.product(*data))
然而,
- 如何对列表的列表执行相同的操作?
- 如何在输入上循环以仅分解列表的列表?
仅当行的第一项是列表时才使用itertools.product
:
final = []
for l in data:
if isinstance(l[0], list): # <- ["B01"]
for c in itertools.product(*l[1:]):
final.append(l[0] + list(c))
else:
final.append(l)
>>> final
[['B_01', '10', '10', '10'],
['B_01', '10', '10', '20'],
['B_01', '10', '20', '10'],
['B_01', '10', '20', '20'],
['D_02', '10', '10', '20'],
['X_03', '10', '10', '20']]
我在程序中使用的当前输入是坐标列表的列表:
data = [["D_02", "10", "10", "20"],
["X_03", "10", "10", "20"]]
为了方便使用,我也希望能够传递一个list of list:
have
:
data = [[["B_01"], ["10"], ["10", "20"], ["10", "20"]],
["D_02", "10", "10", "20"],
["X_03", "10", "10", "20"]]
然后可以将其“分解”成如下所示:
want
:
data = [["B_01", "10", "10", "10"],
["B_01", "10", "10", "20"],
["B_01", "10", "20", "10"],
["B_01", "10", "20", "20"],
["D_02", "10", "10", "20"],
["X_03", "10", "10", "20"]]
我知道可以使用 itertools
包的 product
函数对列表列表执行此操作:
import itertools
list(itertools.product(*data))
然而,
- 如何对列表的列表执行相同的操作?
- 如何在输入上循环以仅分解列表的列表?
仅当行的第一项是列表时才使用itertools.product
:
final = []
for l in data:
if isinstance(l[0], list): # <- ["B01"]
for c in itertools.product(*l[1:]):
final.append(l[0] + list(c))
else:
final.append(l)
>>> final
[['B_01', '10', '10', '10'],
['B_01', '10', '10', '20'],
['B_01', '10', '20', '10'],
['B_01', '10', '20', '20'],
['D_02', '10', '10', '20'],
['X_03', '10', '10', '20']]