Подтвердить что ты не робот

Когда использовать "while" или "for" в Python

Я нахожу проблемы в том, когда я должен использовать цикл while или цикл for в Python. Похоже, люди предпочитают использовать цикл for (меньше строк кода?). Есть ли какая-то конкретная ситуация, с которой я должен использовать ту или иную? Это вопрос личных предпочтений? Коды, которые я прочитал до сих пор, заставили меня подумать, что между ними существуют большие различия.

4b9b3361

Ответ 1

Да, есть огромная разница между временем и для.

Оператор для выполняет итерацию через функцию коллекции или итерабельного объекта или генератора.

Оператор while просто зацикливается до тех пор, пока не будет установлено условие False.

Это не предпочтение. Это вопрос о том, каковы ваши структуры данных.

Часто мы представляем значения, которые мы хотим обработать, как range (фактический список) или xrange (который генерирует значения). Это дает нам структуру данных, специально разработанную для оператора для.

Как правило, мы имеем готовый набор: набор, кортеж, список, карта или даже строка - это уже итерабельная коллекция, поэтому мы просто используем цикл для.. p >

В некоторых случаях нам может потребоваться некоторая обработка функционального программирования для нас, и в этом случае мы можем применить это преобразование как часть итерации. Функции sorted и enumerate применяют преобразование на итерабельном, которое естественно подходит для оператора для.

Если у вас нет аккуратной структуры данных для итерации или у вас нет функции генератора, которая управляет вашей обработкой, вы должны использовать , а.

Ответ 2

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

 while user_is_sleeping():
     wait()

Конечно, вы могли бы написать соответствующий итератор, чтобы инкапсулировать это действие и сделать его доступным через for - но как это могло бы обеспечить читаемость? ¹

Во всех остальных случаях в Python используйте for (или соответствующую функцию более высокого порядка, которая инкапсулирует цикл).

¹, если функция user_is_sleeping возвращает False, когда false, код примера можно переписать в виде следующего цикла for:

for _ in iter(user_is_sleeping, False):
    wait()

Ответ 3

for - это более пифонический выбор для повторения списка, поскольку он проще и легче читать.

Например:

for i in range(11):
    print i

намного проще и легче читать, чем это:

i = 0
while i <= 10:
    print i
    i = i + 1

Ответ 4

Прежде всего, существуют различия между циклами for в python и на других языках. Хотя в python он перебирает список значений (например: для значения в [4,3,2,7]), на большинстве других языков (C/С++, Java, PHP и т.д.) Он действует как цикл while, но проще читать.

Для циклов обычно используются, когда количество итераций известно (например, длина массива), а в то время как циклы используются, когда вы не знаете, сколько времени потребуется (например, алгоритм сортировки пузырьков, который петли, пока значения не отсортированы)

Ответ 5

Рассмотрим обработку итераций. Вы можете сделать это с помощью цикла for:

for i in mylist:
   print i

Или вы можете сделать это с помощью цикла while:

it = mylist.__iter__()
while True:
   try:
      print it.next()
   except StopIteration:
      break

Оба этих блока кода имеют принципиально одно и то же в принципе одинаково. Но цикл for скрывает создание итератора и обработку исключения StopIteration, так что вам не нужно иметь дело с ними самостоятельно.

Единственный раз, когда я могу думать о том, что вы используете цикл while для обработки итерации, было бы, если вам нужно было получить доступ к итератору по какой-либо причине, например. вам нужно было пропустить элементы в списке при некоторых обстоятельствах.

Ответ 6

Для циклов обычно проще понять, что делает итерация. Вы не всегда можете использовать их напрямую, но в большинстве случаев итерационная логика с циклом while может быть обернута внутри функции генератора. Например:

def path_to_root(node):
    while node is not None:
        yield node
        node = node.parent

for parent in path_to_root(node):
    ...

Вместо

parent = node
while parent is not None:
    ...
    parent = parent.parent

Ответ 7

  для циклов используется  когда у вас есть определенное изменение (количество итераций известно).

Пример использования:

  • Итерация по циклу с определенным диапазоном: for i in range(23):.
  • Итерация по коллекциям (строка, список, набор, кортеж, словарь): for book in books:.

цикл - это неопределенное изменение, которое используется при повторении цикла Неизвестное количество раз и заканчивается, когда выполняется какое-то условие.

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

Пример использования:

  • Выполнение блока кода требует, чтобы пользователь ввел указанный ввод: while input == specified_input:.

  • Если у вас есть условие с операторами сравнения: while count < limit and stop != False:.

Ссылки: Для Loops Vs. Пока Loops, Udacity Data Science, Python.org.