创建在指定位置包含指定值的列表

问题描述 投票:0回答:1

我想创建一个给定值列表和位置列表的列表。

例如,假设值和位置列表是

lst1 = [[a,b],[c,d]]

lst2=[[[1,2],[3,4]],[[1,3],[2,4]],[[1,4],[2,3]]].

我想创建列表

result=[[a,a,b,b],[a,b,a,b],[a,b,b,a],[d,d,c,c],[d,c,d,c],[d,c,c,d]].

列表结果的第一个元素的值是

lst1[0][0]
,对应于位置
lst2[0][0][0]
lst2[0][0][1]
。它还具有对应于位置
lst1[0][1]
lst2[0][1][0]
的值
lst2[0][1][1]

结果的第二个元素的值

lst1[0][0]
对应于位置
lst2[1][0][0]
lst[1][0][1]
,值
lst1[0][1]
对应于位置
lst2[1][1][0]
lst[1][1][1]

到目前为止,我能想到的就是首先创建一个结果列表,然后使用 lst1 中的值替换该列表中的元素,使用 lst2 来索引元素。但我发现这非常低效。最有效的方法是什么?

python list indexing replace
1个回答
0
投票

你可以尝试:

lst1 = [["a", "b"], ["c", "d"]]
lst2 = [[[1, 2], [3, 4]], [[1, 3], [2, 4]], [[1, 4], [2, 3]]]

out = []
for l in lst1:
    for subl in lst2:
        m = {k: v for v, subl2 in zip(l, subl) for k in subl2}
        tmp, idx = [], 1
        for subl2 in subl:
            for _ in subl2:
                tmp.append(m[idx])
                idx += 1
        out.append(tmp)

print(out)

打印:

[
    ["a", "a", "b", "b"],
    ["a", "b", "a", "b"],
    ["a", "b", "b", "a"],
    ["c", "c", "d", "d"],
    ["c", "d", "c", "d"],
    ["c", "d", "d", "c"],
]
© www.soinside.com 2019 - 2024. All rights reserved.