Sie können dies leicht testen Sie die timeit
Modul. Für Ihr spezielles Beispiel die erste len
-basierte Lösung scheint schneller zu sein:
$ python --version
Python 2.7.10
$ python -m timeit -s "x = [10,60,20,66,79,5]" "len([i for i in x if 60 < i < 70])"
1000000 loops, best of 3: 0.514 usec per loop
$ python -m timeit -s "x = [10,60,20,66,79,5]" "sum(i for i in x if 60 < i < 70)"
1000000 loops, best of 3: 0.693 usec per loop
Auch für größere Listen - aber mit den meisten Elementen Ihr Prädikat nicht passend - die len
Version nicht langsamer zu sein scheint:
$ python -m timeit -s "x = [66] + [8] * 10000" "len([i for i in x if 60 < i < 70])"
1000 loops, best of 3: 504 usec per loop
$ python -m timeit -s "x = [66] + [8] * 10000" "sum(1 for i in x if 60 < i < 70)"
1000 loops, best of 3: 501 usec per loop
In der Tat, auch wenn die meisten Elemente der Liste Spiel gegeben (so eine große Ergebnisliste passieren zu len
aufgebaut ist), die len
Version gewinnt:
$ python -m timeit -s "x = [66] + [65] * 10000" "len([i for i in x if 60 < i < 70])"
1000 loops, best of 3: 762 usec per loop
$ python -m timeit -s "x = [66] + [65] * 10000" "sum(1 for i in x if 60 < i < 70)"
1000 loops, best of 3: 935 usec per loop
Was jedoch viel schneller scheint, ist, wenn möglich, keine Liste an erster Stelle zu haben, sondern z. a collections.Counter
. Z.B.Für 100000 Elemente erhalte ich:
$ python -m timeit -s "import collections; x = [66] + [65] * 100000" "len([i for i in x if 60 < i < 70])"
100 loops, best of 3: 8.11 msec per loop
$ python -m timeit -s "import collections; x = [66] + [65] * 100000; d = collections.Counter(x)" "sum(v for k,v in d.items() if 60 < k < 70)"
1000000 loops, best of 3: 0.761 usec per loop
Benötigen Sie eigentlich * die * Liste? Wenn nicht, vermeidet die zweite Version es jemals zu erstellen. – jonrsharpe
Die meisten Pythonic bedeutet nicht weniger Zeit/Gedächtnis, aber Sie fragen beide in Ihrer Frage. Willst du wissen, welches Python oder am effizientesten ist? –
Sie können auch 'if i in range (61, 70)' verwenden. –