在较长列表的第n个元素上将两个不同长度的列表组合成元组

时间:2018-06-26 16:36:42

标签: python python-2.7

我想在较长列表的第n个元素上将两个列表组合成一个元组列表。

示例:

list1 = ['I', 'am']
list2 = ['1', '2', '3', '4', '5', '6']

to:
list3 = [('I', 'am', '1', '2', '3'), ('I', 'am', '4', '5', '6')]

不幸的是,我不知道一种方法来遍历具有潜在大量值的列表,以达到结果的目的。

有人可以给我提示如何做吗?

3 个答案:

答案 0 :(得分:4)

从itertools(here)复制并粘贴grouper食谱,然后:

>>> tup = tuple(list1)
>>> [tup + group for group in grouper(list2, 3)]
[('I', 'am', '1', '2', '3'), ('I', 'am', '4', '5', '6')]

答案 1 :(得分:1)

您可以找到list1的连接元素的长度,并在列表理解中使用列表切片:

list1 = ['I', 'am']
list2 = ['1', '2', '3', '4', '5', '6']
l = len(''.join(list1))
final_result = [(*list1, *list2[i:i+l]) for i in range(0, len(list2), l)]

输出:

[('I', 'am', '1', '2', '3'), ('I', 'am', '4', '5', '6')]

答案 2 :(得分:0)

list1 = ['I', 'am']
list2 = ['1', '2', '3', '4', '5', '6']

f = lambda l, n=3: [l[i:i+n] for i in range(0, len(l), n)]
list(map(lambda l: tuple(list1 + l), f(list2)))
# [('I', 'am', '1', '2', '3'), ('I', 'am', '4', '5', '6')]