Python Flashcards
Which data structures are mutable?
list, dict, set, custom classes
Which data structures are immutable?
bool, int, float, tuple, str, frozenset
Библиотека collections:
namedtuple() - подкласс кортежей с именованными полями
deque - контейнер, похожий на список, с более быстрыми append и pop
ChainMap - словароподобный класс для одновременного просмотра нескольких mappings
Counter - словароподобный класс для хешируемых объектов
OrderedDict - словарь, который запоминает порядок добавления элементов
defaultdict - словарь, который заполняет недостающие значения
UserDict - обертка для словарей
UserList - обертка для списков
UserString - обертка для строк
Где будет быстрее поиск и почему: dict, list, set, tuple?
Средняя временная сложность поиска в множествах и словарях соответствует O(1), в случае последовательностей O(n). Кортежи – это неизменяемый тип, поэтому они могут давать выигрыш в скорости перед списками.
В чем разница между списком и массивом?
Список (list) может содержать элементы разного типа (числа, строки), массив содержит только одного типа.
Как создать список?
с помощью квадратных скобок [] или list()
Как добавить элементы в список?
list. append(x) - в конец
list. insert(index, x)
Обращение к элементам списка?
по индексу, срезом list_name[start:stop:step], итерированием (цикл for без счетчика)
Как удалить элемент из списка?
list. remove()
list. pop() - удаление и возвращение последнего
Использование списков?
- Хранить объекты данных разных типов
- Сохранять очередность элементов и порядок вставки
- Хранить повторяющиеся значения
- Изменять элементы
Как удалить повторяющиеся элементы списка, сохранив порядок следования остальных?
lst = ["a", "b", "a", "c", "c"] lst = list(dict.fromkeys(lst))
Почему при изменении списка в цикле используется конструкция вида for x in x in lst[:]?
Здесь применяется оператор среза [:], то есть создается копия. Поэтому изменения в цикле не влияют на оригинальный список.
Как получить конкатенацию кортежей, выкинув неуникальные элементы?
Через множества: tuple(set((1, 2)) ^ set((2, 3)))
Есть два списка одинаковой длины. В одном – ключи, в другом – значения. Как составить словарь?
dict(zip([‘key1’, ‘key2’], [‘value1’, ‘value2’]))
Как инвертировать словарь, то есть поменять местами пары ключ-значения?
d = {‘a’: 1, ‘b’: 2}
dict(zip(d.values(), d.keys()))
Что делает функция id()?
Возвращает идентификатор переданного объекта, уникальный на время его существования.
Как получить список всех атрибутов объекта?
С помощью функции dir()
В чем отличие (i for i in arr) от [i for i in arr]?
Слева – выражение-генератор, справа – генератор списка (list comprehension). Генератор списка целиком создает список в памяти, а выражение-генератор – по мере необходимости. Итератор является более общей концепцией, чем генератор, и представляет собой любой объект, класс которого имеет методы __next__ и __iter__. Генератор – это итератор, который обычно создается путем вызова функции, содержащей не менее одного оператора yield. Это ключевое слово действует аналогично return, но возвращает объект-генератор.
Что такое анонимные функции? Где они могут быть полезны?
В Python анонимные функции создаются при помощи лямбда-выражений. Такие выражения удобно использовать в местах, где ожидается функция с достаточно ограниченной задачей.
Что такое магические методы?
Так называют специальные методы, обрамленные двумя подчеркиваниями. Магические методы представляют простой способ заставить объекты вести себя аналогично встроенным типам. Это, в частности, позволяет стандартизировать поведение базовых операторов с экземплярами класса.
How to use f-string?
print(f’His name is {name}’)
print(f’His name is {name!r}’)
print(f’{book:{10}} {author:{8}} {pages:.>{7}}’)
How to get back to the beginning when reading a file?
file.seek(0)
How to write into a file without saving the original?
my_file = open(‘test.txt’,’w+’) ‘w’ for writing, ‘w+’ for reading and writing
How to add content into a file without deleting the original?
my_file = open(‘test.txt’,’a+’) ‘a’ for appending, ‘a+’ for reading and appending