Моей первой идеей было использование всех базук, доступных для работы:
- использование
zip
для чередования вашего списка и еще одного, сделанного из x, xx, xxx, ... сделано с использованием строкиумножение (используя генераторское понимание, чтобы избежать создания «жесткого» списка, нет необходимости) - используйте
itertools.chain
, чтобы сгладить полученные кортежи
следующим образом (первая попытка работает, новозможности для улучшения):
>>> lst = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']
>>> list(itertools.chain.from_iterable(zip(lst,("x"*(i+1) for i in range(len(lst))))))
вариант с использованием enumerate
, а не zip
, немного лучше (range(len(lst))
, как правило, большой нет-нет, кстати):
>>> list(itertools.chain.from_iterable((v,"x"*i) for i,v in enumerate(lst,1)))
избегая chain
, используя listcomp для сглаживания кортежей (вероятно, самая разумная альтернатива, определенно использующая больше букв, чем символов):
>>> [item for elts in ((v,"x"*i) for i,v in enumerate(lst,1)) for item in elts]
Все 3 print:
['a',
'x',
'b',
'xx',
'c',
'xxx',
'd',
'xxxx',
'e',
'xxxxx',
'f',
'xxxxxx',
'g',
'xxxxxxx',
'h',
'xxxxxxxx']