Рубрики
Без рубрики

Python – Как изменить последовательность во время итерации над ней?

Python 101: Сегодняшняя тема – «Как модифицировать последовательность, когда итерация на нее?»

Автор оригинала: Chris.

Изменение последовательности, когда итерация на нее может вызвать нежелательное поведение из-за того, как является сбор итератор. Чтобы избежать этой проблемы, простое решение является повторением для копии списка. Например, вы получите копию list_1 Используя нотацию среза с значениями по умолчанию list_1 [:] Отказ Поскольку вы повторяете копию списка, вы можете изменить исходный список, не повреждая итератора.

В следующей быстрой статье я объясню эту проблему и ее решение более подробно. Пошли!

Проблема : Учитывая последовательность, такую как Список Python в питоне. Как изменить последовательность во время итерации по нему?

Пример : Скажем, у вас есть список строк Python:

# Given list of strings
words = ['cat', 'mouse', 'dog']

Вы хотите повторить каждый элемент и проверять, если оно длиннее 3 символов. Если это так, вы хотите вставить его в начале, чтобы все строки более 3 символов размещены в начале. Вы хотите, чтобы в следующем списке с 4-символьным словом «Мышь» размещен в начале списка:

# Your desired result:
words = ['mouse', 'cat', 'dog']

Почему это сложная проблема?

Эта проблема не так проста, как удаление элементов из последовательности, над которой вы итерации. Это может привести к неопределенному поведению, как объяснено ниже.

Перед входом в цикл на петлю переводчик Python создает объект итератора. Объект iTerator предоставляет метод Далее () Возвращая следующий элемент в последовательности.

Чтобы добиться этого, экстракты итератора на время создания, информация, такая как размер последовательности. Если вы измените последовательность «на GO», эта информация становится недействительной. Например, если количество элементов изменяется во время выполнения, объект iTerator может полагать, что он готов, пока в нем есть объекты.

Решение : Следующий код предоставляет простое решение – итерации по копии списка, используя Обозначение нарезки Отказ Другими словами, код копирует список Во-первых и итерации над копией. С помощью этого метода мы можем безопасно изменить исходный список, так как это не повлияет на копию никак. Наружное обозначение – очень удобный способ копирования последовательностей.

words = ['cat', 'mouse', 'dog']
for w in words[:]:
    if len(w) > 3:
        words.insert(0, w)
print(words)

Если вы используете этот фрагмент кода, первый элемент списка будет «Мышь» -И вывод:

# Your desired result:
words = ['mouse', 'cat', 'dog']

Вы можете решить связанную головоломку на нашем приложении Finxter.com, чтобы улучшить ваше понимание основных операторов Python – и повеселиться в процессе! 🙂.

Упражнение : Угадайте – какой вывод этого кода головоломки?

Вы мастер-кодер? Проверьте свои навыки сейчас!

Вы можете посмотреть видео здесь:

Работая в качестве исследователя в распределенных системах, доктор Кристиан Майер нашел свою любовь к учению студентов компьютерных наук.

Чтобы помочь студентам достичь более высоких уровней успеха Python, он основал сайт программирования образования Finxter.com Отказ Он автор популярной книги программирования Python One-listers (Nostarch 2020), Coauthor of Кофе-брейк Python Серия самооставленных книг, энтузиаста компьютерных наук, Фрилансера и владелец одного из лучших 10 крупнейших Питон блоги по всему миру.

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