Как преобразовать список в Python
Допустим, существует список:
s = ['аарона', '2', 'ааронов', '1', 'аб', '1', 'аба', '2', 'абажур', '1',
'абажуром', '7', 'абажуры', '1', 'абаи', '1']
необходимо преобразовать его таким образом, чтобы количество вхождений "слов" в список соответствовало следующей за словом "цифре", то есть, чтобы список приобрел вид:
s = ['аарона', 'аарона', 'ааронов', 'аб', 'аба', 'аба', 'абажур',
'абажуром', 'абажуром','абажуром', 'абажуром','абажуром','абажуром','абажуром',
'абажуры', 'абаи', ]
Подскажите, пожалуйста, как это можно сделать
Ответы (4 шт):
Автор решения: nomnoms12
→ Ссылка
Пример:
s = ['аарона', '2', 'ааронов', '1', 'аб', '1', 'аба', '2', 'абажур', '1', 'абажуром', '7', 'абажуры', '1', 'абаи', '1']
result = []
for i in range(0, len(s), 2):
for k in range(int(s[i+1])):
result.append(s[i])
print(result)
stdout:
['аарона', 'аарона', 'ааронов', 'аб', 'аба', 'аба', 'абажур', 'абажуром', 'абажуром', 'абажуром', 'абажуром', 'абажуром', 'абажуром', 'абажуром', 'абажуры', 'абаи']
Автор решения: strawdog
→ Ссылка
еще так можно:
s = ['аарона', '2', 'ааронов', '1', 'аб', '1', 'аба', '2', 'абажур', '1', 'абажуром', '7', 'абажуры', '1', 'абаи', '1']
res = []
[res.extend([x[0] for i in range(int(x[1]))]) for x in zip(s[::2], s[1::2])]
print(res)
Получим:
['аарона', 'аарона', 'ааронов', 'аб', 'аба', 'аба', 'абажур', 'абажуром', 'абажуром', 'абажуром', 'абажуром', 'абажуром', 'абажуром', 'абажуром', 'абажуры', 'абаи']
Автор решения: CrazyElf
→ Ссылка
Чуть другой вариант, мне кажется более питоновый по духу.
s = ['аарона', '2', 'ааронов', '1', 'аб', '1', 'аба', '2', 'абажур', '1', 'абажуром', '7', 'абажуры', '1', 'абаи', '1']
result = []
for w,n in zip(s[::2],s[1::2]):
result.extend([w] * int(n))
print(result)
Результат:
['аарона', 'аарона', 'ааронов', 'аб', 'аба', 'аба', 'абажур', 'абажуром', 'абажуром', 'абажуром', 'абажуром', 'абажуром', 'абажуром', 'абажуром', 'абажуры', 'абаи']
Автор решения: MarianD
→ Ссылка
[elem for lst in [[word] * n for (word, n) in zip(s[::2], map(int, s[1::2]))]
for elem in lst]
Результат:
['аарона', 'аарона', 'ааронов', 'аб', 'аба', 'аба', 'абажур', 'абажуром', 'абажуром', 'абажуром', 'абажуром', 'абажуром', 'абажуром', 'абажуром', 'абажуры', 'абаи']