Почему Python работает по-разному при итерации с использованием индексов?Например, с помощью функции zip (которая не имеет индексов при использовании в цикле for) значение не сохраняется в переменной.В то время как с функцией enumerate () (которая позволяет мне иметь «индекс» в цикле foor) это происходит нормально.
Решение, которое не использует индекс, имеет разные значения для моей переменной "width", когда я пытаюсь напечатать ее внутри и вне цикла, здесь функция zip () использовалась для работы с двумясписки одновременно без необходимости работать с их индексами:
tableData = [['apples', 'oranges', 'cherries', 'banana'],
['Alice', 'Bob', 'Carol', 'David'],
['dogs', 'cats', 'moose', 'goose']]
def printTable(myListOfLists):
colWidths = [0] * len(myListOfLists)
for lists, width in zip(myListOfLists, colWidths):
for item in lists:
if width < len(item):
width = len(item)
print(width) #This prints my 'width' rightly
print(colWidths) #This prints my 'width' wrongly
printTable(tableData)
Приведенный выше код выдает следующий нежелательный вывод:
8
5
5
[0, 0, 0]
Но если яиспользуйте enumerate () (создание индексов для одновременной работы с двумя списками), значения, измененные внутри цикла for, будут правильно сохранены в переменной ширины, см. пример кода:
tableData = [['apples', 'oranges', 'cherries', 'banana'],
['Alice', 'Bob', 'Carol', 'David'],
['dogs', 'cats', 'moose', 'goose']]
def printTable(myListOfLists):
colWidths = [0] * len(myListOfLists)
for index, lists in enumerate(myListOfLists):
for item in lists:
if colWidths[index] < len(item):
colWidths[index] = len(item)
print(colWidths[index]) #This prints my 'width' rightly
print(colWidths) #This ALSO prints my 'width' rightly
printTable(tableData)
Эта втораявывод:
8
5
5
[8, 5, 5]
Тогда, пожалуйста, как я могу работать с zip () и изменить мою «внешнюю» переменную?Что я делаю неправильно?Спасибо.