Извините, что ответил на мой собственный вопрос, но ответы здесь вдохновили меня немного поиграть, и я пришел к чему-то значительно более быстрому, чем выше:
import itertools
import numpy
data = range(1,10000)
[x for y,z in itertools.izip(data,numpy.log10(data)) for x in (y, z)]
Дело в том, что numpy.log10()
более эффективен, чем многократный вызов math.log10()
. С 10000 целыми числами я получил 4,59 мсек против 32,8 мсек для понимания списка Игнасио, 32,9 мсек для цепи JBernaro () и 482 мсек для суммы Карла (). Я предполагаю, что версия sum () проигрывает, когда она выделяет список длины 2 для каждого значения x.