Объединение двух списков разной длины в кортежи в каждом n-м элементе более длинного списка - PullRequest
0 голосов
/ 26 июня 2018

Я хочу объединить два списка в список кортежей для каждого 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 голосов
/ 26 июня 2018

Скопируйте и вставьте рецепт grouper из itertools ( здесь ), а затем:

>>> tup = tuple(list1)
>>> [tup + group for group in grouper(list2, 3)]
[('I', 'am', '1', '2', '3'), ('I', 'am', '4', '5', '6')]
0 голосов
/ 26 июня 2018
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')]
0 голосов
/ 26 июня 2018

Вы можете найти длину соединенных элементов 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')]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...