Python: изменить параметр цикла во время работы цикла - PullRequest
0 голосов
/ 12 ноября 2011

Я хочу изменить цикл for на [4,5,6]. Этот код просто напечатать: 1, 2, 3

a = [1,2,3]

for i in a:
    global a
    a = [4,5,6]
    print i

Я хочу вывод 1, 4, 5, 6.

Ответы [ 3 ]

3 голосов
/ 12 ноября 2011

Вам необходимо уточнить вопрос, потому что нет объяснения того, как вы должны получить желаемый результат 1, 4, 5, 6, когда вы вводите [1, 2, 3]. Следующее дает желаемый результат, но он полностью временный и не имеет смысла:

i = 0
a = [1, 2, 3]
while i < len(a):
    print(a[i])
    if a[i] == 1:
        a = [4, 5, 6]
        i = 0          # edit - good catch larsmans
    else:
        i += 1

Суть в том, что вы не можете изменять параметры цикла for во время выполнения цикла. Из документации по питону:

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

Редактировать: если на основе комментариев вы пытаетесь просмотреть URL-адреса, вам нужна более сложная логика для выполнения поиска в глубину или в ширину, чем просто замена одного списка (ссылки верхнего уровня) на другой список (ссылки на первой странице). В вашем примере вы полностью теряете след страниц 2 и 3 после погружения в страницу 1.

0 голосов
/ 12 ноября 2011

Если вы напечатаете id (a) в полезных местах кода, вы поймете, почему это не работает.

Даже что-то подобное не работает:

a = [1,2,3]

def change_a(new_val):
    a = new_val

for i in a:
    change_a([4,5,6])
    print i

Я не думаю, что можно делать то, что ты хочешь. Прервите текущий цикл и начните новый с новым значением a.

0 голосов
/ 12 ноября 2011

Проблема в том, что присваивание

a = [4,5,6]

просто изменяет переменную a, а не базовый объект.Есть разные способы справиться с этим;можно было бы использовать цикл while, например

a = [1,2,3]

i = 0
while i<len(a):
    print a[i]
    a = [4,5,6]
    i += 1

print

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