Сжатие двух списков при одновременной обработке коротких - PullRequest
0 голосов
/ 04 апреля 2020
a = ["1", "2", "3"] 
b = ["a", "b", "c", "d", "e"] 
desired_output = ["1a", "2b", "3c", "1d", "2e"] 

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

(Примечание: я пытался использовать zip_longest, где список fillvalue=cycle сквозной a ... но будет ли это правильный путь к go об этом?)

Советы? Спасибо. Dan.

Ответы [ 2 ]

1 голос
/ 05 апреля 2020

Попробуйте это:

from itertools
a = ["1", "2", "3"]
b = ["a", "b", "c", "d", "e"]
[x + y for x, y in zip(itertools.cycle(a), b)]
0 голосов
/ 05 апреля 2020

Вы захотите использовать некоторую модульную арифметику c, чтобы обернуть индексы более короткого списка, пока это не будет сделано столько раз, сколько необходимо для соответствия длине более длинного списка.

a = ['1','2','3']
b = ['a','b','c','d','e']

desired_output = []
for i in range(len(b)):
    a_index = i % len(a)
    index = a_index + i
    val = a[a_index] + b[i]
    desired_output.append(val)

Более компактно, вы можете использовать понимание списка.

desired_output = [a[i % len(a)] + b[i] for i in range(len(b))]
...