Поколение Python 🐍
50.3K subscribers
2K photos
16 videos
6 files
866 links
Серия курсов по языку Python от BEEGEEK 🐝.

Сайт: pygen.ru
Мерч: shop.pygen.ru
Чат: @pygen_ru_comments
Бот: @pygen_ru_bot
Поддержка: @pygen_ru_support

Перечень РКН: https://www.gosuslugi.ru/snet/673650d605391b3bfb5541c0
Download Telegram
Друзья, давайте обсудим, что означает ошибка IndexError: list index out of range. 😎

Эта ошибка возникает, когда мы пытаемся обратиться к элементу списка по несуществующему индексу.

❓ Где же ошибка в нашей программе?

Мы одновременно итерируем список в цикле for и изменяем его содержимое.

Цикл находит длину списка один раз перед первой итерацией и запоминает ее. Во время работы цикла мы удаляем элементы списка, и его фактическая длина уменьшается. Однако цикл отрабатывает количество итераций, равное исходной длине списка. Это приводит к тому, что на одной из итераций мы обращаемся к списку по индексу, значение которого больше текущей длины. В результате возникает ошибка IndexError: list index out of range.

‼️‼️‼️❗️ Не изменяйте список во время итераций по нему: это антипаттерн, который может привести к непредсказуемому поведению программы и ошибкам.

Проблему в нашем коде можно решить, например, с помощью списочного выражения с условием, которое позволит на этапе создания списка добавить в него лишь те элементы, которые не подлежат удалению (в нашем примере — нечетные числа).

Приведенный ниже код:
numbers = [num for num in range(9) if num % 2]

print(numbers)

выводит [1, 3, 5, 7].

Ставьте реакцию:

😎 — если сразу нашли ошибку в коде
👀 — если ошибку отыскать не удалось

#python #полезныйматериал #чтоозначаетошибка
Please open Telegram to view this post
VIEW IN TELEGRAM
1😎79👀22🔥18❤9👨‍💻543👍1💯11
Друзья, сегодня поговорим о представлениях словарей.

❤️В Python словари (тип dict) имеют три специальных метода:

❤️keys() — для получения всех ключей
❤️values() — для получения всех значений ключей
❤️items() — для получения всех пар ключ-значение

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

До версии Python 3.0 методы словарей keys(), values() и items() возвращали обычные списки. Это приводило к потреблению большого количества памяти, так как требовало копирования в список содержимого словаря.

Для решения данной проблемы сначала было предложено ввести дополнительные методы словарей iterkeys(), itervalues() и iteritems(), возвращающие более эффективные с точки зрения потребления памяти итераторы.

Позднее, в PEP 3106, было предложено изменить методы keys(), values() и items(), чтобы они возвращали объекты-представления, а методы iterkeys(), itervalues() и iteritems() удалить из Python. В отличие от итераторов, объекты-представления можно использовать в коде многократно.

Представления словарей имеют длину, их можно перебирать в цикле и использовать для проверки элементов на вхождение. Кроме того, они поддерживают некоторые методы множеств и соответствующие им операторы.

❗️Объекты-представления не поддерживают индексацию. При попытке обратиться к элементу представления словаря по индексу возникает ошибка TypeError.

Однако на основе представлений словаря можно получить другой итерируемый объект с помощью соответствующих функций. Например, передав представление в функцию list(), мы получим индексируемый список.

Представления словарей относятся к классам dict_keys, dict_values и dict_items, интересной особенностью которых является то, что их нельзя использовать в программе самостоятельно. При попытке создать собственный экземпляр этих классов мы получим ошибку TypeError: cannot create <class name> instances.

Ставьте реакцию:

🔥 — если знали о представлениях словарей
👀 — если узнали о них впервые

#python #полезныйматериал #словари #dict #представлениясловарей
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
1👀99🔥65❤1764✍11