Вы, вероятно, изменили бы name
на i
в элементе for в итерируемом операторе, но забыли изменить name
на i
в форматированном операторе печати и запустить этот новый цикл for сразу после первый.
Обратите внимание на тонкие различия между i
и name
в каждом из следующих трех циклов.
В
student_names = ["Mark", "Katarina", "Jessica"]
for name in student_names:
print("Student name is {0}".format(name))
for i in student_names:
print("Student name is {0}".format(name))
for i in student_names:
print("Student name is {0}".format(i))
Из:
Student name is Mark
Student name is Katarina
Student name is Jessica
Student name is Jessica
Student name is Jessica
Student name is Jessica
Student name is Mark
Student name is Katarina
Student name is Jessica
Обратите внимание, что средний цикл печатает только фамилию в вашем списке имен. Это потому, что name
последний раз был присвоен последнему элементу в student_names
, но он используется для форматирования вместо i
в среднем цикле.
В цикле Python вы назначаете переменную для итерации по элементам итерируемого объекта. Общие итерируемые типы включают list
, str
, dict
и tuple
. Можно использовать любой объект с методом __iter__
.
В вашем примере вы перебираете list
, который содержит три элемента. Это означает, что ваш цикл for будет повторяться три раза, по одному разу для каждого элемента в вашем списке. Если вы также хотите отслеживать индекс для каждого элемента в вашем списке, вы можете использовать enumerate
.
В
for i, name in enumerate(student_names):
print('Student {0}: {1}'.format(i, name))
Из:
Student 0: Mark
Student 1: Katarina
Student 2: Jessica
Здесь первая переменная i
присваивается индексу элемента, который соответствует name
. Старайтесь избегать добавления или удаления элементов из всего, что вы повторяете, поскольку вы можете столкнуться с неожиданными результатами.
В
for i, name in enumerate(student_names):
student_names.remove(name)
print("Student {0}: {1}".format(name))
Из:
Student 0: Mark
Student 1: Jessica
Существует множество скучных объяснений того, почему это происходит, но лучше избегать удаления или добавления элементов в то, что вы можете повторять.