在以下代码中:

a = [["2022"], ["2023"]]
b = [["blue", "red"], ["green", "yellow"]]
c = [["1", "2", "3"], ["4", "5", "6", "7"], ["8", "9", "10", "11"], ["12", "13"]]

我想要一个输出这个的函数,但对于任何数量的变量:

[
    ["2022", "blue", "1"],
    ["2022", "blue", "2"],
    ["2022", "blue", "3"],
    ["2022", "red", "4"],
    ["2022", "red", "5"],
    ["2022", "red", "6"],
    ["2022", "red", "7"],
    ["2023", "green", "8"],
    ["2023", "green", "9"],
    ["2023", "green", "10"],
    ["2023", "green", "11"],
    ["2023", "yellow", "12"],
    ["2023", "yellow", "13"],
]

我已经用itertools或zip搜索了一个函数来实现这一点,但还没有找到任何结果.

为了澄清,我的用例是迭代嵌套/多级下拉菜单的值(第一个下拉菜单返回选项,每个选项返回不同的下拉菜单,等等).

推荐答案

首先,将第一个参数加入一个列表,每个列表只有一个元素.

然后,对于下一个参数中的每个sublist及其索引i,您 Select 上一个迭代res[i]的第i个列表,并将其添加到aux len(子列表)列表中,其中每个列表都是res[i],其中一个项目来自sublist.

from itertools import chain

def f(*args):
    res = list(chain.from_iterable([[item] for item in l] for l in args[0]))
    for arg in args[1:]:
        aux = []
        for i, sublist in enumerate(arg):
            aux += [res[i] + [opt] for opt in sublist]
        res = aux
    return res

此外,如果要验证传递给函数的参数是否正确,可以使用以下选项:

def check(*args):
    size = sum(len(l) for l in args[0])
    for arg in args[1:]:
        if len(arg) != size:
            return False
        size = sum(len(l) for l in arg)
    return True

Python相关问答推荐

Tkinter滑动条标签.我不确定如何删除滑动块标签或更改其文本

请从Python访问kivy子部件的功能需要帮助

使用Ubuntu、Python和Weasyprint的Docker文件-venv的问题

Image Font生成带有条形码Code 128的条形码时出现枕头错误OSErsor:无法打开资源

有条件地采样我的大型DF的最有效方法

SQLGory-file包FilField不允许提供自定义文件名,自动将文件保存为未命名

对某些列的总数进行民意调查,但不单独列出每列

. str.替换pandas.series的方法未按预期工作

为什么带有dropna=False的groupby会阻止后续的MultiIndex.dropna()工作?

从dict的列中分钟

从嵌套的yaml创建一个嵌套字符串,后面跟着点

Tkinter菜单自发添加额外项目

如何在Python中使用另一个数据框更改列值(列表)

幂集,其中每个元素可以是正或负""""

在不同的帧B中判断帧A中的子字符串,每个帧的大小不同

重置PD帧中的值

在方法中设置属性值时,如何处理语句不可达[Unreacable]";的问题?

具有相同图例 colored颜色 和标签的堆叠子图

在Google Drive中获取特定文件夹内的FolderID和文件夹名称

使用tqdm的进度条