这个标题有点奇怪,但基本上我需要列出两个列表:

list1 = [['1', '1', '1', '1'], ['2', '2', '2', '2'], ['3', '3', '3', '3']]
list2 = [['a', 'a', 'a'], ['b', 'b', 'b']]

然后在两个列表的子列表中的元素之间交替,并创建作为新列表中的元素的子列表,该新列表的子列表是来自上面的交替元素

list3 = [['1', 'a', '1', 'a', '1', 'a', '1'], ['1', 'b', '1', 'b', '1', 'b', '1'], ['2', 'a', '2', 'a', '2', 'a', '2'], ... ]

现在我的代码是:

def foo(array1, array2):
    i = 1
    for sublist1 in array1:
        for sublist2 in array2:
            for val in sublist2:
                sublist1.insert(i, val)
                i += 2
        i = 1
    return array1

我得到的结果是:

[['1', 'a', '1', 'a', '1', 'a', '1', 'b', 'b', 'b'], ['2', 'a', '2', 'a', '2', 'a', '2', 'b', 'b', 'b'], ['3', 'a', '3', 'a', '3', 'a', '3', 'b', 'b', 'b']]

问题是,我现在正在使用小得多的列表作为概念证明,但最终的算法需要能够对包含数百万个子列表的列表执行此操作.

推荐答案

我会用itertools来完成这项任务:

from itertools import product, zip_longest

list1 = [["1", "1", "1", "1"], ["2", "2", "2", "2"], ["3", "3", "3", "3"]]
list2 = [["a", "a", "a"], ["b", "b", "b"]]

out = []
for c in product(list1, list2):
    out.append([v for c in zip_longest(*c) for v in c if v is not None])

print(out)

打印:

[
    ["1", "a", "1", "a", "1", "a", "1"],
    ["1", "b", "1", "b", "1", "b", "1"],
    ["2", "a", "2", "a", "2", "a", "2"],
    ["2", "b", "2", "b", "2", "b", "2"],
    ["3", "a", "3", "a", "3", "a", "3"],
    ["3", "b", "3", "b", "3", "b", "3"],
]

如果您的任何子列表中有None个,请使用itertools.zip_longest中的其他fillvalue=

Python相关问答推荐

如何比较numPy数组中的两个图像以获取它们不同的像素

在Python中处理大量CSV文件中的数据

numba jitClass,记录类型为字符串

按顺序合并2个词典列表

Polars:用氨纶的其他部分替换氨纶的部分

无法定位元素错误404

在Python argparse包中添加formatter_class MetavarTypeHelpFormatter时, - help不再工作""""

从spaCy的句子中提取日期

未知依赖项pin—1阻止conda安装""

名为__main__. py的Python模块在导入时不运行'

Python中的变量每次增加超过1

如何检测鼠标/键盘的空闲时间,而不是其他输入设备?

Gunicorn无法启动Flask应用,因为无法将应用解析为属性名或函数调用.'"'' "

应用指定的规则构建数组

是否需要依赖反转来确保呼叫方和被呼叫方之间的分离?

在聚合中使用python-polars时如何计算模式

Match-Case构造中的对象可调用性测试

无法使用请求模块从网页上抓取一些产品的名称

如何在表单中添加管理员风格的输入(PDF)

如何在不遇到IndexError的情况下将基数10的整数转换为基数80?