Выполните пошаговое преобразование из второго в первое и посмотрите, как производительность меняется с каждым шагом.
- Удалите line.strip.Это приведет к некоторому ускорению, будет ли это важно, другое дело.Выделение лишнее, как было упомянуто вами и THC4k.
- Затем замените цикл for с помощью
l.append
на map (int, sys.stdin).Я предполагаю, что это даст значительное ускорение. - Замените
map
и l.sort
на imap
и sorted
.Я предполагаю, что это не повлияет на производительность, может быть небольшое замедление, но это будет далеко не значительным.Между этими двумя я обычно выбираю первое, но с горизонтом Python 3 последнее предпочтительнее. - Замените цикл for, используя
print
на print '\n'.join(...)
.Я предполагаю, что это будет еще одним ускорением, но это будет стоить вам немного памяти. - Добавьте cStringIO (что, кстати, совершенно не нужно), чтобы увидеть, как это влияет на производительность.Я предполагаю, что это будет немного медленнее, но недостаточно для того, чтобы противопоставить 4 и 2.
Тогда, если вы попробуете ответить THC4k, он, вероятно, будет быстрее, чем все вышеперечисленное, но при этом будет прощеи его легче читать, и он использует меньше памяти, чем 4 и 5. Он ведет себя несколько иначе (он не удаляет начальные нули из чисел).
Конечно, попробуйте это самостоятельно, вместо того, чтобы доверять кому-либо догадываться.Также запустите cProfile
в своем коде и посмотрите, какие части теряют больше всего времени.