Пусть у меня есть списокСписок постижение с элементами появляются дважды
l = ['a', 'c', 'b']
и то, что я хочу, это список, в котором появляются эти элементы в два раза, один за другим, так что
['a', 'a', 'c', 'c', 'b', 'b']
и я хочу сделайте это самым питоническим способом.
Моя половина решение делает что-то вроде
[[l[i], l[i]] for i in range(len(l))]
, который дает
[['a', 'a'], ['c', 'c'], ['b', 'b']]
Отсюда, я должен был бы разобрать (пешком) список, чтобы удалить внутренние списки и получить один плоский список.
У кого-нибудь есть идея сделать это за один раз? Очевидно, что такие вещи, как l * 2
, не помогли бы, так как это дало ['a', 'c', 'b', 'a', 'c', 'b']
, и я хочу, чтобы те же самые элементы смежны.
Выбора этой, как это кажется более элегантным. Обратите внимание, что время выполнения этого задания дает 1000000 циклов, лучше всего 3: 1.49 мкс на петлю' по сравнению с ответом @Yousaf, который дает «Самый медленный прогон занимает 5,32 раза дольше, чем самый быстрый. Это может означать, что промежуточный результат кэшируется. 1000000 циклов, наилучший из 3: 1.12 мкс за цикл' –
Я считаю, что использовать более длинный список для синхронизации. Три элемента настолько коротки, что время не имеет большого значения. Я также получил «Самый медленный прогон в 5,41 раза дольше, чем самый быстрый» для кода выше. – UpSampler