Как повторить элементы списка заданное количество раз? (python)
Есть два списка одинаковой длины. Первый содержит строковые значения (str). Второй численные (int). Необходимо создать третий список, в котором необходимо повторить строковые значения из первого списка столько раз, сколько указано во втором списке.
Например:
На входе:
a=["A","B","C"]
b=[2,3,2]
На выходе:
c=["A","A","B","B","B","C","C"]
Ответы (7 шт):
a = ["a", "b", "c"]
b = [2, 3, 4]
d = []
for x in range(len(a)):
d.append(a[x] * b[x])
Достаточно легко можно сделать с помощью оператора for
Дополняю вопрос про команды append и extend
Команда append полностью всё предложение кидает в одну ячейку списка, а
extend как раз раскидивает символы на каждую ячейку списка.
Для двух размерного массива
a=[["A","B","C"],["A","B","C"]]
b=[[2,3,2],[2,3,4]]
d = []
k = []
for i in range(len(a)):
for x in range(len(a[i])):
k.extend(a[i][x] * b[i][x])
d.append(k)
print(d)
Если не запариваться с однострочными программами, то самый типичный код для такой ситуации будет выглядеть так:
x = []
for i in range(len(a)):
x += [a[i]]*b[i]
Можно в одну строчку, если захотелось побаловаться функциональным программированием
print(list(map(lambda x, y: [c for c in x] * y, ["A","B","C"], [2,3,2])))
from operator import mul
from itertools import starmap, chain
a, b = ["A","B","C"], [2,3,2]
print(list(chain(*map(list, starmap(mul, zip(a, b))))))
Ещё один вариант с zip:
a = ["A","B","C"]
b = [2,3,2]
c = [x for i, j in zip(a, b) for x in [i] * j]
print(c)
# ['A', 'A', 'B', 'B', 'B', 'C', 'C']
с библиотекой itertools можно ужаться до такого кода:
from itertools import repeat,chain
a = ["a", "b", "c"]
b = [2, 3, 4]
c = [*chain(*map(repeat,a,b))]
Если делать по простому, то получится такой код:
a = ['A', 'B', 'C']
b = [2, 3, 2]
c = []
for s, k in zip(a, b):
c.extend(s * k)
print(c)
Если хочется в одну строку, то так:
a = ['A', 'B', 'C']
b = [2, 3, 2]
c = [s for s, k in zip(a, b) for _ in range(k)]
print(c)