Почему a_tuple[i] += ['item'] не работает, а добавление работает
Это из-за того, что расширенный оператор присваивания - оператор присваивания, а также из-за разницы между изменяемыми и неизменяемыми объектами в Python.
#theory // Just Python
Это из-за того, что расширенный оператор присваивания - оператор присваивания, а также из-за разницы между изменяемыми и неизменяемыми объектами в Python.
#theory // Just Python
Примечание для словаря (dict) (ч.1)
Для того, чтобы объект мог быть ключом словаря, он должен быть хешируем. У кортежа, возможен случай, когда его элемент является не хешируемым объектом, и соответственно сам кортеж тогда тоже не является хешируемым и не может выступать ключом словаря.
#theory // Just Python
Для того, чтобы объект мог быть ключом словаря, он должен быть хешируем. У кортежа, возможен случай, когда его элемент является не хешируемым объектом, и соответственно сам кортеж тогда тоже не является хешируемым и не может выступать ключом словаря.
#theory // Just Python
Примечание для словаря (dict) (ч.2)
{} без значений создают словарь, а со значениями, в зависимости от синтаксиса могут создавать как множество, так и словарь.
#theory // Just Python
{} без значений создают словарь, а со значениями, в зависимости от синтаксиса могут создавать как множество, так и словарь.
#theory // Just Python
Проверка принадлежности элемента данной коллекции c помощью оператора in
x in s — вернет True, если элемент входит в коллекцию s и False — если не входит
Есть и вариант проверки не принадлежности: x not in s, где есть по сути, просто добавляется отрицание перед булевым значением предыдущего выражения.
#theory // Just Python
x in s — вернет True, если элемент входит в коллекцию s и False — если не входит
Есть и вариант проверки не принадлежности: x not in s, где есть по сути, просто добавляется отрицание перед булевым значением предыдущего выражения.
#theory // Just Python
Обход всех элементов коллекции в цикле for in
В данном случае, в цикле будут последовательно перебираться элементы коллекции, пока не будут перебраны все из них.
#theory // Just Python
В данном случае, в цикле будут последовательно перебираться элементы коллекции, пока не будут перебраны все из них.
#theory // Just Python
Обработка элементов (ч.1)
Порядок обработки элементов для не индексированных коллекций будет не тот, как при их создании.
У прохода в цикле по словарю есть свои особенности.
При таком обходе словаря, перебираются только ключи равносильно for elm in my_dict.keys().
#theory // Just Python
Порядок обработки элементов для не индексированных коллекций будет не тот, как при их создании.
У прохода в цикле по словарю есть свои особенности.
При таком обходе словаря, перебираются только ключи равносильно for elm in my_dict.keys().
#theory // Just Python
Обработка элементов (ч.2)
При желании можно пройти только по значениям. Но чаще всего нужны пары ключ(key) — значение (value).
Проход по .items() возвращает кортеж (ключ, значение), который присваивается кортежу переменных key, value.
#theory // Just Python
При желании можно пройти только по значениям. Но чаще всего нужны пары ключ(key) — значение (value).
Проход по .items() возвращает кортеж (ключ, значение), который присваивается кортежу переменных key, value.
#theory // Just Python
Эффективное использование метода imatmul(self, other)
Метод imatmul(self, other) в Python позволяет определить поведение оператора матричного умножения с присваиванием (@=) для пользовательских классов. Это полезно для работы с матрицами и другими структурами данных, поддерживающими матричное умножение, делая код более выразительным и эффективным.
Метод imatmul — это специальный метод, который позволяет реализовать матричное умножение с присваиванием. Когда оператор @= применяется к объекту, Python вызывает этот метод, позволяя изменить объект на месте в соответствии с результатом матричного умножения.
Использование метода imatmul позволяет легко реализовать матричное умножение с присваиванием для пользовательских классов. Это делает код более чистым и удобным для чтения, а также улучшает производительность за счет изменения объектов на месте.
#theory // Just Python
Метод imatmul(self, other) в Python позволяет определить поведение оператора матричного умножения с присваиванием (@=) для пользовательских классов. Это полезно для работы с матрицами и другими структурами данных, поддерживающими матричное умножение, делая код более выразительным и эффективным.
Метод imatmul — это специальный метод, который позволяет реализовать матричное умножение с присваиванием. Когда оператор @= применяется к объекту, Python вызывает этот метод, позволяя изменить объект на месте в соответствии с результатом матричного умножения.
Использование метода imatmul позволяет легко реализовать матричное умножение с присваиванием для пользовательских классов. Это делает код более чистым и удобным для чтения, а также улучшает производительность за счет изменения объектов на месте.
#theory // Just Python
Реализация операции вычитания на месте для пользовательского класса
Метод isub в Python используется для реализации операции вычитания на месте (оператора -=). Этот метод позволяет изменять объект "на месте", что может быть полезно для оптимизации производительности и управления памятью.
Рассмотрим пример, в котором у нас есть класс, представляющий пользовательский список чисел. Мы хотим поддерживать операцию вычитания на месте как с обычными числами Python (int), так и с другими экземплярами нашего класса.
Этот лайфхак позволяет вашему классу поддерживать более гибкие и удобные операции вычитания на месте, что улучшает производительность и удобство использования, а также помогает избежать лишних копий данных.
#theory // Just Python
Метод isub в Python используется для реализации операции вычитания на месте (оператора -=). Этот метод позволяет изменять объект "на месте", что может быть полезно для оптимизации производительности и управления памятью.
Рассмотрим пример, в котором у нас есть класс, представляющий пользовательский список чисел. Мы хотим поддерживать операцию вычитания на месте как с обычными числами Python (int), так и с другими экземплярами нашего класса.
Этот лайфхак позволяет вашему классу поддерживать более гибкие и удобные операции вычитания на месте, что улучшает производительность и удобство использования, а также помогает избежать лишних копий данных.
#theory // Just Python
Метод .index()
.index() — возвращает минимальный индекс переданного элемента для индексированных коллекций (строка, список, кортеж)
#theory // Just Python
.index() — возвращает минимальный индекс переданного элемента для индексированных коллекций (строка, список, кортеж)
#theory // Just Python
Метод .clear()
.clear() — метод изменяемых коллекций (список, словарь, множество), удаляющий из коллекции все элементы и превращающий её в пустую коллекцию.
#theory // Just Python
.clear() — метод изменяемых коллекций (список, словарь, множество), удаляющий из коллекции все элементы и превращающий её в пустую коллекцию.
#theory // Just Python
Конвертация одного типа коллекции в другой
В зависимости от стоящих задач, один тип коллекции можно конвертировать в другой тип коллекции. Для этого, как правило достаточно передать одну коллекцию в функцию создания другой.
#theory // Just Python
В зависимости от стоящих задач, один тип коллекции можно конвертировать в другой тип коллекции. Для этого, как правило достаточно передать одну коллекцию в функцию создания другой.
#theory // Just Python
Особые методы сравнения множеств (set, frozenset)
set_a.isdisjoint(set_b) — истина, если set_a и set_b не имеют общих элементов.
set_b.issubset(set_a) — если все элементы множества set_b принадлежат множеству set_a, то множество set_b целиком входит в множество set_a и является его подмножеством (set_b — подмножество)
set_a.issuperset(set_b) — соответственно, если условие выше справедливо, то set_a — надмножество
#theory // Just Python
set_a.isdisjoint(set_b) — истина, если set_a и set_b не имеют общих элементов.
set_b.issubset(set_a) — если все элементы множества set_b принадлежат множеству set_a, то множество set_b целиком входит в множество set_a и является его подмножеством (set_b — подмножество)
set_a.issuperset(set_b) — соответственно, если условие выше справедливо, то set_a — надмножество
#theory // Just Python
Особые методы сравнения множеств (set, frozenset)
set_a.isdisjoint(set_b) — истина, если set_a и set_b не имеют общих элементов.
set_b.issubset(set_a) — если все элементы множества set_b принадлежат множеству set_a, то множество set_b целиком входит в множество set_a и является его подмножеством (set_b — подмножество)
set_a.issuperset(set_b) — соответственно, если условие выше справедливо, то set_a — надмножество
#theory // Just Python
set_a.isdisjoint(set_b) — истина, если set_a и set_b не имеют общих элементов.
set_b.issubset(set_a) — если все элементы множества set_b принадлежат множеству set_a, то множество set_b целиком входит в множество set_a и является его подмножеством (set_b — подмножество)
set_a.issuperset(set_b) — соответственно, если условие выше справедливо, то set_a — надмножество
#theory // Just Python
Функции min(), max(), sum()
Функции min(), max() — поиск минимального и максимального элемента соответственно — работают не только для числовых, но и для строковых значений.
sum() — суммирование всех элементов, если они все числовые.
#theory // Just Python
Функции min(), max() — поиск минимального и максимального элемента соответственно — работают не только для числовых, но и для строковых значений.
sum() — суммирование всех элементов, если они все числовые.
#theory // Just Python
Возможная ошибка при обработке элементов
Не меняйте количество элементов коллекции в теле цикла во время итерации по этой же коллекции! — Это порождает не всегда очевидные на первый взгляд ошибки. Чтобы этого избежать подобных побочных эффектов, можно, например, итерировать копию коллекции.
#theory // Just Python
Не меняйте количество элементов коллекции в теле цикла во время итерации по этой же коллекции! — Это порождает не всегда очевидные на первый взгляд ошибки. Чтобы этого избежать подобных побочных эффектов, можно, например, итерировать копию коллекции.
#theory // Just Python
Изменение элемента списка по индексу (ч.1)
Поскольку кортежи и строки у нас неизменяемые коллекции, то по индексу мы можем только брать элементы, но не менять их.
#theory // Just Python
Поскольку кортежи и строки у нас неизменяемые коллекции, то по индексу мы можем только брать элементы, но не менять их.
#theory // Just Python
Изменение элемента списка по индексу (ч.2)
А вот для списка, если взятие элемента по индексу располагается в левой части выражения, а далее идёт оператор присваивания =, то мы задаём новое значение элементу с этим индексом.
#theory // Just Python
А вот для списка, если взятие элемента по индексу располагается в левой части выражения, а далее идёт оператор присваивания =, то мы задаём новое значение элементу с этим индексом.
#theory // Just Python
Синтаксис среза
Следует помнить, что взяв элемент по индексу или срезом (slice) мы не как не меняем исходную коллекцию, мы просто скопировали ее часть для дальнейшего использования (например добавления в другую коллекцию, вывода на печать, каких-то вычислений). Поскольку сама коллекция не меняется — это применимо как к изменяемым (список) так и к неизменяемым (строка, кортеж) последовательностям.
#theory // Just Python
Следует помнить, что взяв элемент по индексу или срезом (slice) мы не как не меняем исходную коллекцию, мы просто скопировали ее часть для дальнейшего использования (например добавления в другую коллекцию, вывода на печать, каких-то вычислений). Поскольку сама коллекция не меняется — это применимо как к изменяемым (список) так и к неизменяемым (строка, кортеж) последовательностям.
#theory // Just Python
Изменение списка срезом (ч.1)
Важный момент, на котором не всегда заостряется внимание — с помощью среза можно не только получать копию коллекции, но в случае списка можно также менять значения элементов, удалять и добавлять новые.
Даже если хотим добавить один элемент, необходимо передавать итерируемый объект, иначе будет ошибка TypeError: can only assign an iterable
#theory // Just Python
Важный момент, на котором не всегда заостряется внимание — с помощью среза можно не только получать копию коллекции, но в случае списка можно также менять значения элементов, удалять и добавлять новые.
Даже если хотим добавить один элемент, необходимо передавать итерируемый объект, иначе будет ошибка TypeError: can only assign an iterable
#theory // Just Python
Изменение списка срезом (ч.2)
Можно менять части последовательности — это применение выглядит наиболее интересным, так как решает задачу просто и наглядно.
#theory // Just Python
Можно менять части последовательности — это применение выглядит наиболее интересным, так как решает задачу просто и наглядно.
#theory // Just Python