Как я могу умножить два списка разной длины таким образом, чтобы более короткий список повторялся? - PullRequest
0 голосов
/ 17 октября 2019

Мне нужно умножить эти два списка вместе, но один очень длинный, а другой очень короткий, длина длинного списка кратна длине короткого. Как я могу умножить их так, чтобы короткий повторялся до тех пор, пока все элементы в длинном списке не будут умножены на него.

Например:

longList = [10, 10, 10, 10, 10, 10, 10, 10, 10] 
shortList = [1, 2, 3]

Что я пытаюсь сделать:

longList * shortList # Something like this

Желаемый вывод

[10, 20, 30, 10, 20, 30, 10, 20, 30] 

* Это недубликат Как сжать два списка разного размера? , потому что я не собираюсь их застегивать, а скорее умножить их.

Ответы [ 3 ]

3 голосов
/ 17 октября 2019

Этого можно добиться с помощью простого цикла и инструментов itertools

import itertools

longList = [1, 0, 2, 6, 3, 4, 5, 3, 1]
shortList = [1, 2, 3]

output_list = []

for long, short in zip(longList, itertools.cycle(shortList)):
    output_list.append(long * short)
0 голосов
/ 17 октября 2019

Должна работать следующая pythonic функция (использующая понимание списка ):

def loop_multiply(ll,sl) : 
    return [ x*sl[i%len(sl)] for i,x in enumerate(ll) ] 


print(loop_multiply([10,10,10,10,10,10,10,10,10],[1,2,3])) 
# prints - [10, 20, 30, 10, 20, 30, 10, 20, 30]

Надеюсь, что поможет:)

0 голосов
/ 17 октября 2019

Решение

Следующий код будет работать, даже если число элементов в longList не является точным кратным shortList. И это также не требует никаких import заявлений.

longList = [10, 10, 10, 10, 10, 10, 10, 10, 10,] 
shortList = [1, 2, 3]

container = list()
n = len(longList)%len(shortList)
m = int(len(longList)/len(shortList))
for _ in range(m):
    container += shortList.copy()     
if n>0:
    container += shortList[:n]
[e*f for e,f in zip(container, longList)]

Выход :

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