Генерация списка номеров - какое из них лучше вообще? - PullRequest
0 голосов
/ 11 марта 2020
n=[n for n in range(10)]
print(n)

r=list(range(10))
print(r)

a=range(0,10)
print(list(a))

Есть ли горстка преимуществ этих конкретных обозначений?

Ответы [ 2 ]

3 голосов
/ 11 марта 2020

Python имеет модуль timeit для быстрых тестов:

Python 3.6.9 (default, Nov  7 2019, 10:44:02) 
[GCC 8.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import timeit
>>> timeit.timeit("[n for n in range(10)]")
0.4846451000000229
>>> timeit.timeit("list(range(10))")
0.3175106840000126
>>> 

Очевидно, использование list() быстрее. Это также менее многословно, и цель более ясна ИМХО (списочные выражения обычно используются для преобразования / фильтрации итерируемых элементов).

0 голосов
/ 18 марта 2020

Бруно уже объяснил, почему понимание списков может быть неидеальным, но я хотел подчеркнуть некоторую разницу между списками и диапазонами.

Важно отметить, что list и range имеют некоторые разные функции и методы. Поэтому ответ на вопрос «какой из них лучше» зависит от вашего приложения.

Преимущества диапазона

Диапазон является повторяемым и не должен хранить все числа в памяти. Например, Python не имеет проблем с range(int(1e20)), но list(range(int(1e20))) выдаст ошибку.

Диапазон также можно запрашивать гораздо эффективнее. Сравните следующий фрагмент кода:

>>> from timeit import timeit
>>> timeit("100 in numbers",setup='numbers=range(10000)')
0.1061642
>>> timeit("100 in numbers",setup='numbers=list(range(10000))')
1.2257957

В этом случае диапазон для запроса в 10 раз быстрее, и эта разница будет увеличиваться только для больших списков.

Преимущества списка

Самая большая разница в том, что список может содержать объекты любого типа. Поэтому, если вы хотите, чтобы ваши числа были плавающими, то это более простое решение.

Кроме того, оно позволяет добавлять или удалять отдельные записи. Так что, если вам нужно упорядочить свои номера, список может быть проще.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...