我想创建一个给定值列表和位置列表的列表。
例如,假设值和位置列表是
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 来索引元素。但我发现这非常低效。最有效的方法是什么?
你可以尝试:
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"],
]