2014-12-06 3 views
1

У меня есть следующий псевдокод.Диапазон обновления() для цикла

for j in range(0, len(list)): 
    xx 
    xx 
    if something == True: 
     list.append("x") 

Будет range(0, len(list)) называть каждый раз, когда J итерацию через блок кода, и, следовательно, будет его обновление максимального значения?

Я попытался понять это, глядя на данные стека, однако я не мог понять это.

ответ

2

Нет, поскольку range(0, len(list)) создается один раз в начале, чтобы создать список (или итератор в python 3), а затем он просто повторяется (используя следующую или индексирование). Это эквивалентно:

list_of_nums = range(0, len(list)) # [0, 1, 2, 3, ...] 
for i in list_of_nums: 
    j = i[counter] 
    ... 

Используйте while цикл вроде:

j = 0 
while j < len(list)): 
    xx 
    xx 
    if something == True: 
     list.append("x") 
    j += 1 
+0

@ Vlad Спасибо, поэтому я использую для петель столько, сколько могу. – matsjoyce

0

итерацию вычисляется один раз. Начиная с range() на Python 2.x возвращается фиксированная структура, итерация никогда не будет изменена после начала цикла. Если вам нужна итерация для изменения, вам придется использовать то, что не возвращает фиксированную структуру, например, итерацию по самому списку.

0

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

Присвоение значения len временной переменной будет сделать это более очевидным:

tempLen = len(list) 
for j in range(0, tempLen): 
    xx 
    xx 
    if something == True: 
     list.append("x") 
0

range No. является встроенной функцией. Вызов возвращает список. Оператор for сохраняет первый возврат от range и затем останавливается. Попробуйте выполнить следующее:

l = ['a', 'b', 'c'] 
for j in range(0, len(l)): 
    l.append(j) 
    print j 

Он печатает три строки.

BTW, это не хорошая идея присвоить переменную list.

+0

'Не рекомендуется назначать переменную для списка 'Где он это делает? – matsjoyce

Смежные вопросы