Для цикла while или while, чтобы сделать что-то n раз

В Python у вас есть два прекрасных способа повторить некоторые действия более одного раза. Один из них - цикл while, а другой - for. Поэтому давайте посмотрим на две простые части кода:

for i in range(n):
    do_sth()

И другое:

i = 0
while i < n:
    do_sth()
    i += 1

Мой вопрос - какой из них лучше. Конечно, первый, который очень распространен в примерах документации и различных фрагментах кода, которые вы можете найти в Интернете, намного более изящный и короче, но, с другой стороны, он создает совершенно бесполезный список целых чисел, их. Разве это не пустая трата памяти, особенно в отношении большого количества итераций?

Как вы думаете, какой способ лучше?

Ответ 1

но, с другой стороны, он создает абсолютно бесполезный список целых чисел, чтобы перебирать их. Разве это не пустая трата памяти, особенно в отношении большого количества итераций?

Вот для чего xrange(n). Он избегает создания списка чисел и вместо этого предоставляет объект итератора.

В Python 3, xrange() был переименован в range() - если вам нужен список, вам нужно запросить его через list(range(n)).

Ответ 2

Это более легкий вес, чем xrange (и цикл while), поскольку даже создавать объекты int даже не нужно. Он также хорошо работает в Python2 и Python3

from itertools import repeat
for i in repeat(None, 10):
    do_sth()

Ответ 3

Фундаментальное различие в большинстве языков программирования заключается в том, что если только не произойдет неожиданное событие, цикл for будет всегда повторять n раз, а затем закончить с помощью цикла while, он может повторить 0 times, 1, more or even forever, в зависимости от заданного условия, которое всегда истинно в начале каждого цикла и всегда ложно при выходе из цикла (для полноты цикла do ... while (или repeat until) для языков, имеющих его, всегда выполняется по крайней мере один раз и не гарантирует условия при первом выполнении).

Итак, ответ на ваш вопрос: "все зависит от того, что вы пытаетесь сделать"!