Чем отличается 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 шт):

Автор решения: alex9127

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

Во втором варианте len(A) почему то не изменяется, и поэтому он переберет все элементы как и должен.

Если вы не изменяете список который перебираете - первый вариант лучше. В вашем случае нужен второй вариант.

→ Ссылка