从多个其他列表中按位置创建配对列表

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

我需要从其他几个列表中列出一个对的列表。这些对将包含每个列表中相同位置的值。列表的数量可能不同,但每个列表都有相同数量的值。我认为这不完全是组合/排列,因为有些值需要重复。

用例子更容易解释:

list_a = [1, 2, 3, 4, 5]
list_b = [6, 7, 8, 9, 10]
list_c = [11, 12, 13, 14, 15]
list_d = [16, 17, 18, 19, 20]

Output required = [(1,6),(6,11),(11,16),(2,7),(7,12),(12,17)....etc]

输出不一定是元组列表,但我认为这样是最合理的。它可以进一步分开,每对“列”都是它们自己的列表,但这并不重要。

我本来打算用循环来暴力破解它,但我确信有更好的方法。我觉得它在 zips 和 itertools 的路径下,但我无法得到它。这篇关于相同大小的块的文章几乎就是这样,但是您可以从上面的示例中看到,我需要在下一对中重新使用前面的值。 如何将列表分割成大小相等的块?

python list combinations
1个回答
0
投票

这可以使用两个嵌套调用来完成:

zip
:

list_a = [1, 2, 3, 4, 5]
list_b = [6, 7, 8, 9, 10]
list_c = [11, 12, 13, 14, 15]
list_d = [16, 17, 18, 19, 20]

lists = [list_a, list_b, list_c, list_d]

output = [y for x in zip(*lists) for y in zip(x, x[1:])]

print(output)

输出:

[(1, 6), (6, 11), (11, 16), (2, 7), (7, 12), (12, 17), (3, 8), (8, 13), (13, 18), (4, 9), (9, 14), (14, 19), (5, 10), (10, 15), (15, 20)]

第一次调用 zip 会生成每个列表的第一个元素、第二个元素等的元组。

对 zip 的第二次调用创建 (first, Second)、(第二、第三)、(第三、第四) 等对。

© www.soinside.com 2019 - 2024. All rights reserved.