Понимание списка и цикл for по одним и тем же данным несколько раз (с точки зрения скорости)Python

Программы на Python
Ответить
Anonymous
 Понимание списка и цикл for по одним и тем же данным несколько раз (с точки зрения скорости)

Сообщение Anonymous »

Я знаю, что понимание списков должно быть быстрее, поскольку оно выполняет меньше действий более эффективно, но то, что я измеряю, мне противоречит интуиции.Если у меня есть один большой кусок слов:

Код: Выделить всё

words = ("Hello. How are you? I am fine. What about you? Me too " * 10_000).split(" ")
и я хочу выполнить некоторую статистику по этому списку слов — у меня есть два варианта понимания цикла и списка:

Код: Выделить всё

%%timeit

#1
a = [x for x in words if x.islower()]
>> 3.13 ms ± 802 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
и

Код: Выделить всё

a = []
%%timeit
#2
for x in words:
if x.islower():
a.append(x)
>> 2.54 ms ± 101 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
Это означает, что понимание происходит медленнее. Чего я вообще не понимаю, так это второго примера, где мне нужно провести несколько тестов:

Код: Выделить всё

%%timeit

#1
a = [x for x in words if x.islower()]
b = [x for x in words if x.isupper()]
c = [x for x in words if x.istitle()]
d = [x for x in words if x.isalpha()]
e = [x for x in words if x.isnumeric()]
f = [x for x in words if x.isalpha() and x.isupper()]
>> 42.1 ms ± 375 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)
и

Код: Выделить всё

%%timeit
#2
for x in words:
if x.islower():
a.append(x)
if x.isupper():
b.append(x)
if x.istitle():
c.append(x)
if x.isalpha():
d.append(x)
if x.isnumeric():
e.append(x)
if x.isalpha() and x.isupper():
f.append(x)
>> 70 ms ± 19.7 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)
Я подумал, что использование только одного цикла for будет более эффективным, чем обработка нескольких списков, просматривающих этот список снова и снова. Что является ключом к пониманию такого поведения?

Подробнее здесь: https://stackoverflow.com/questions/792 ... speed-wise
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»