首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >拆下清单的清单

拆下清单的清单
EN

Stack Overflow用户
提问于 2021-07-26 09:39:28
回答 1查看 132关注 0票数 0

我在程序中使用的当前输入是一个坐标列表:

代码语言:javascript
复制
data = [["D_02", "10", "10", "20"],
         ["X_03", "10", "10", "20"]]

为了方便使用和方便起见,我还想传递一份清单清单:

have

代码语言:javascript
复制
data = [[["B_01"], ["10"], ["10", "20"], ["10", "20"]],
             ["D_02", "10", "10", "20"],
             ["X_03", "10", "10", "20"]]

然后能够“爆炸”它,使它像下面这样:

want

代码语言:javascript
复制
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"]]

我知道,对于具有product包的itertools函数的列表,可以这样做:

代码语言:javascript
复制
import itertools
list(itertools.product(*data))

然而,

  1. 如何对列表列表做同样的操作?
  2. ,如何在输入上循环以只爆炸列表列表?
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-07-26 09:49:36

仅当行的第一项是列表时才使用itertools.product

代码语言:javascript
复制
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)
代码语言:javascript
复制
>>> 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']]
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68527640

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档