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

Изменение переменной итерации внутри цикла for в Python

Я пытаюсь сделать что-то так же просто, как изменить переменную, в которой я выполняю итерацию (i), но я получаю разные типы поведения как в Python, так и в C.

В Python

for i in range(10):
    print i,
    if i == 2:
        i = 4;

Я получаю 0 1 2 3 4 5 6 7 8 9, но эквивалент в C:

int i;
for (i = 0; i < 10; i++) {
    printf("%d", i);
    if (i == 2)
        i = 4;
}

Я получаю 01256789 (обратите внимание, что числа 3 и 4 не отображаются, как и ожидалось).

Что здесь происходит?

4b9b3361

Ответ 1

Вы не делаете то, что считаете себя. Например:

for i in range(10):

будет постоянно устанавливать i как следующий элемент в диапазоне 0-10 независимо от того, что.

Если вы хотите сделать эквивалент в python, вы бы сделали:

i = 0
while i < 10:
    print(i)
    if i == 2:
        i = 4
    else:      # these line are
        i += 1 # the correct way
    i += 1 # note that this is wrong if you want 1,2,4,5,6,7,8,9

Если вы пытаетесь преобразовать его в C, тогда вы должны помнить, что i++ в цикле for всегда будет добавлять к i.

Ответ 2

Функция range() создает список. Например, range(10) создаст следующий список: [1, 2, 3, 4, 5, 6, 7, 8, 9].

Когда вы скажете for i in range(10), сначала будет сгенерирован весь список [1, 2, 3, 4, 5, 6, 7, 8, 9], а затем i будет упорядочен по всем значениям из этого списка.

Не имеет значения, измените ли значение i, потому что на следующей итерации ему будет назначен следующий элемент из списка.

Это C/С++, с другой стороны, в конце каждой итерации значение i увеличивается, а затем сравнивается с максимально допустимым значением (в данном случае 9), а если оно больше, то контур заканчивается.

Ответ 3

Python дает вам элементы в range(10), один за другим. C несколько раз увеличивает переменную.

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

Ответ 4

Когда вы вызываете range(10), вы создаете итерируемый список [0,1,2,3,4,5,6,7,8,9].

И цикл for просто выбирает одно число за другим из списка на каждом шагу, независимо от того, изменил ли вы значение i.

Ответ 5

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

>>> range(10)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

Однако язык C, который вы написали, просто использует условие состояния, чтобы изменить значение i. Нет функции.

Ответ 6

Вы не можете сделать это, используя функцию диапазона. вы должны сделать это, используя цикл while только потому, что для цикла используется функция диапазона, а переменная функции диапазона будет увеличиваться по его внутреннему методу независимо от того, что вы указали в цикле, оно будет увеличиваться только по диапазону. для я в диапазоне (10): ... печать i ... если я == 2: ... я = 4 ... еще: ... я + = 1 ... 0 1 2 3 4 5 6 7 8 9

Интересный пример здесь.

для я в диапазоне (10): ... печать i ... я = я + 10 ... печать i ... это напечатает... 0 10 1 11 2 12 3 13 4 14 5 15 6 16 7 17 8 18 9 19