Чем отличается for i in A и for i in range(len(A))
Вот я хочу перебросить элементы из одного списка в другой, чтобы в другом они располагались по возрастанию. Но почему, когда я пишу:
def Sort(A):
lst = []
for element in A:
x = min(A)
lst.append(x)
A.remove(x)
return lst
list2 = [9, 8 , 7, 6, 5, 4, 3, 2, 1, 0]
list3 = Sort(list2)
print(list3)
выводит [0, 1, 2, 3, 4], то есть половину элементов. А если вместо A написать range(len(A)):
def Sort(A):
lst = []
for element in range(len(A)):
x = min(A)
lst.append(x)
A.remove(x)
return lst
list2 = [9, 8 , 7, 6, 5, 4, 3, 2, 1, 0]
list3 = Sort(list2)
print(list3)
то все выводится верно. [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]. В чем отличие? Ведь и там, и там я перебираю элементы списка. Только в первом случае я этот перебор делаю по элементам, а во втором по индексам. Какая разница как именно это делать? Заранее спасибо.
Ответы (1 шт):
В первом варианте, когда вы используете список, то он каждый раз считывается заново, таким образом когда он просчитывает пять элементов и список из которого вы берете тоже становится длиной из пяти элементов, то он на шестой итерации думает что перебрал весь список из-за того что он состоит в настоящий момент из пяти элементов.
Во втором варианте len(A) почему то не изменяется, и поэтому он переберет все элементы как и должен.
Если вы не изменяете список который перебираете - первый вариант лучше. В вашем случае нужен второй вариант.