Добавить списки разной длины на велосипеде по наименьшему - PullRequest
0 голосов
/ 11 февраля 2019

У меня есть два списка:

a = [50, 17, 54, 26]
b = [19,  7,  8, 18, 36, 8, 18, 36, 18, 14]

Я хочу добавить к элементам b соответствующие элементы a.Когда элементы в a заканчиваются, я хочу перебрать a для снабжения элементов.Результат должен быть:

c = [69, 24, 62, 44, 86, 25, 72, 62, 68, 31]

Каков "Pythonic" способ реализовать это?

Ответы [ 2 ]

0 голосов
/ 11 февраля 2019

Если вам не нужен импорт, вы можете использовать оператор по модулю (%) .

a = [50, 17, 54, 26]
b = [19, 7, 8, 18, 36, 8, 18, 36, 18, 14]
[a[i%len(a)]+b[i] for i in range(len(b))]

Вывод

[69, 24, 62, 44, 86, 25, 72, 62, 68, 31]
0 голосов
/ 11 февраля 2019

Вы можете использовать понимание списка, чтобы добавить элементы из обоих списков, сжатых вместе, и использовать itertools.cycle, так что итератор a повторяется столько раз, сколько необходимо, пока b не будет исчерпан.:

from itertools import cycle
a = [50, 17, 54, 26]
b = [19,  7,  8, 18, 36, 8, 18, 36, 18, 14]

[i+j for i,j in zip(cycle(a), b)]

Вывод

[69, 24, 62, 44, 86, 25, 72, 62, 68, 31]

Подробности

Если вы посмотрите на итераторкортежей, сгенерированных из заархивированного выражения:

list(zip(cycle(a),b))

[(50, 19),
 (17, 7),
 (54, 8),
 (26, 18),
 (50, 36),
 (17, 8),
 (54, 18),
 (26, 36),
 (50, 18),
 (17, 14)]

Вы можете видеть, что элементы в a циклически повторяются до тех пор, пока не исчерпан другой итератор, что позволяет очень легко выполнить некоторые операции с чередующимися элементами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...