Показаны различия между двумя версиями страницы.
Предыдущая версия справа и слева Предыдущая версия Следующая версия | Предыдущая версия | ||
develop:pyton:lists [2022/02/16 17:07] admin |
develop:pyton:lists [2022/12/18 16:04] (текущий) admin |
||
---|---|---|---|
Строка 3: | Строка 3: | ||
===== Списки, | ===== Списки, | ||
- | ==== Списки | + | Нумерованные наборы объектов, |
+ | Поддерживают обращение по индексу, срез, конкатенацию, | ||
- | <code python> | ||
- | </ | ||
- | <code python> | + | ==== Списки ==== |
- | </ | + | **Изменяемый тип данных**\\ |
=== Создание списка === | === Создание списка === | ||
+ | * **list(...)** | ||
+ | * **["", | ||
+ | * **.append('' | ||
- | <code python> | + | Вложенные списки следует создавать методом **append()**\\ |
- | </ | + | т.к. **хранятся ссылки**, |
- | + | ||
- | <code python> | + | |
- | </ | + | |
=== Операции над списками === | === Операции над списками === | ||
- | + | Можно **удалить часть** списка присвоив **срезу пустое значение**\\ | |
- | + | Элементы в обратном порядке: | |
- | <code python> | + | Обращение **за пределы индекса- исключение**\\ |
- | </ | + | |
- | + | ||
- | <code python> | + | |
- | </ | + | |
=== Многомерные списки === | === Многомерные списки === | ||
- | + | Элементы могут быть любого типа, в т.ч. и целыми списками\\ | |
- | + | ||
- | <code python> | + | |
- | </ | + | |
<code python> | <code python> | ||
+ | arr= [ | ||
+ | [1, 2, 3, ' | ||
+ | [3, 2, 1, ' | ||
+ | [4, 5, 6, [1, 2]] | ||
+ | ] | ||
</ | </ | ||
=== Перебор элементов списка === | === Перебор элементов списка === | ||
- | + | При переборе в цикле for, итератор можно изменять, | |
- | + | Для генерации индексов можно использовать диапазон: | |
- | <code python> | + | Так же, есть функция **enumerate()**, |
- | </ | + | |
<code python> | <code python> | ||
+ | for i, elem in enumerate(arr): | ||
+ | arr[i] *= 2 | ||
</ | </ | ||
=== Генераторы списков === | === Генераторы списков === | ||
+ | Генерирует последовательность для списка, | ||
+ | <code python> | ||
+ | arr= [1, 2, 3, 4] | ||
+ | arr= [i * 2 for i in arr] | ||
+ | # Может иметь сложную, | ||
+ | arr= [i * 10 for i in arr if i % 2== 0] | ||
- | <code python> | + | # Или |
+ | arr= [[1,2], [3,4], [5,6]] | ||
+ | arr= [i * 10 for i in arr for j in i if j % 2== 0] | ||
+ | >> [20,40,60] | ||
</ | </ | ||
+ | Если выражение разместить в круглых скобах, | ||
<code python> | <code python> | ||
+ | arr= [1, 4, 12, 45, 10] | ||
+ | sum((i for i in arr if i % 2 == 0)) | ||
+ | >> 26 | ||
</ | </ | ||
- | === zip(), map(), filter(), reduce() | + | === Фильтрация в списке |
- | + | [[https:// | |
<code python> | <code python> | ||
- | </ | + | # В новый список добавляется элемент i, если подходит под if, его можно модифицировать в начале конструкции |
+ | res = [i for i in raw_list if re.search(f" | ||
- | <code python> | + | # |
+ | regexp = re.compile(f" | ||
+ | res2 = list(filter(regexp.fullmatch, | ||
</ | </ | ||
- | === Добавление/ | ||
+ | === zip(), map(), filter(), reduce() === | ||
+ | **map()** - позволяет применить **заданную функцию к каждому элементу**, | ||
+ | Указать можно несколько списков, | ||
- | <code python> | + | **zip()** - передается несколько списков, |
- | </ | + | |
+ | **filter** - позволяет выполнить проверку каждого элемента последовательности, | ||
+ | Передается функция для проверки, | ||
+ | |||
+ | **reduce()** - применяет указанную функцию к элементам и **накапливает результат**. В функцию **передается два значения**, | ||
<code python> | <code python> | ||
+ | print(list(map(myfunc, | ||
+ | print(list(zip([1, | ||
</ | </ | ||
- | === Поиск в списке === | + | === Добавление/ |
+ | * **append()** - добавить элемент в конец | ||
+ | * **extend()** - добавить последовательность (список/кортеж) в конец | ||
+ | * + конкатенация | ||
+ | * + += | ||
+ | * + присвоение срезу | ||
+ | * **insert()** - ставить элемент в указанную позицию | ||
+ | * **pop()** - удаляет последний либо указанный (по индексу) элемент | ||
+ | * **remove()** - удаляет первый по значению элемент | ||
+ | * **clear()** - очищает весь список | ||
+ | Для **удаления повторяющихся** значений можно преобразовать список во множество, | ||
- | <code python> | ||
- | </ | ||
- | <code python> | + | === Поиск элементов в списке и сведения о них === |
- | </code> | + | Проверка вхождения- **in** |
+ | Получить индекс указанного элемента- **index()**, | ||
+ | Кол-во указанных значений- **count()**\\ | ||
+ | **max()**/ **min()**\\ | ||
+ | **any()** / **all()** - проверка элементов на True, возврат положительный если хотя бы один ==true / все ==true\\ | ||
=== Переворачивание/ | === Переворачивание/ | ||
- | + | Метод **reverse()** переворачивает список, | |
- | + | Ф-я **shuffle()** - перемешивает случайным образом\\ | |
- | <code python> | + | |
- | </ | + | |
- | + | ||
- | <code python> | + | |
- | </ | + | |
=== Выбор случайных элементов === | === Выбор случайных элементов === | ||
- | + | import random | |
- | + | **random.choice()** - возвращает случайный элемент из любой последовательности\\ | |
- | <code python> | + | **random.sample()** - вернет список из случайных элементов входного списка\\ |
- | </ | + | |
- | + | ||
- | <code python> | + | |
- | </ | + | |
=== Сортировка === | === Сортировка === | ||
- | + | Метод **sort()** - можно указать собственную функцию для сортировки, есть аналогичная ф-я\\ | |
- | + | ||
- | <code python> | + | |
- | </ | + | |
- | + | ||
- | <code python> | + | |
- | </ | + | |
- | + | ||
- | + | ||
- | === Заполнение числами === | + | |
- | + | ||
- | + | ||
- | <code python> | + | |
- | </ | + | |
- | + | ||
- | <code python> | + | |
- | </ | + | |
=== Преобразование в строку === | === Преобразование в строку === | ||
- | + | Метод **join()**, **str()**\\ | |
- | + | ||
- | <code python> | + | |
- | </ | + | |
- | + | ||
- | <code python> | + | |
- | </ | + | |
==== Кортежи ==== | ==== Кортежи ==== | ||
+ | **Не изменяемый тип данных (список)**\\ | ||
- | + | Создать можно ф-ей **tuple()**, | |
- | <code python> | + | В целом, поддерживают те же методы что и списки, |
- | </ | + | |
- | + | ||
- | <code python> | + | |
- | </ | + | |
==== Множества ==== | ==== Множества ==== | ||
+ | Набор **уникальных значений**. Может быть как изменяемым так и не изменяемым. **set()**\\ | ||
+ | Есть целый ряд методов для работы с парами множеств, | ||
- | + | **frozenset()**- неизменяемое множество\\ | |
- | <code python> | + | |
- | </ | + | |
- | + | ||
- | <code python> | + | |
- | </ | + | |
==== Диапазоны ==== | ==== Диапазоны ==== | ||
+ | Содержит только последовательные значения, | ||
+ | Поддерживается сравнение диапазонов (== !=) и методы **start()**/ | ||
+ | <code python> | ||
+ | range(< | ||
- | <code python> | + | range(1, 10) |
+ | range(10, 1, -1) | ||
+ | range(10, 110, 10) | ||
</ | </ | ||
- | <code python> | ||
- | </ | ||
==== Модуль itertools ==== | ==== Модуль itertools ==== | ||
+ | Ф-ции позволяющие генерировать различные последовательности, | ||
- | <code python> | + | === Генерирование неопределенного кол-ва значений === |
- | </code> | + | * **count(<start>=0, <step>=1)** - создает бесконечную последовательность. Удобно для подсчета\\ |
+ | * **cycle()** - на каждой итерации возвращает очередной элемент указанной последовательности, | ||
+ | * **repeat()** - возвращает объект указанное кол-во раз\\ | ||
<code python> | <code python> | ||
- | </code> | + | list(zip(itertools.count(), |
+ | >> [(0, a), (1, b), (2, c), (3, d), (4, e), (5, f)] | ||
+ | list(zip(itertools.cycle([0, | ||
+ | >> [(0, a), (1, b), (0, c), (1, d), (0, e), (1, f)] | ||
- | === Генерирование значений === | + | list(zip(itertools.repeate(5]), |
- | + | >> | |
- | + | ||
- | <code python> | + | |
- | </ | + | |
- | + | ||
- | <code python> | + | |
</ | </ | ||
=== Генерирование комбинаций === | === Генерирование комбинаций === | ||
+ | * **combinations()** - на каждой итерации возвращает кортеж, | ||
+ | * **combinations_with_replacement()** - -||- ток элементы могут повторяться\\ | ||
+ | * **permutations()** - -||- если кол-во не указано, | ||
+ | * **product()** - -||- из одной или нескольких последовательностей\\ | ||
<code python> | <code python> | ||
- | </code> | + | list(itertools.combinations(' |
+ | >> [(' | ||
- | <code python> | + | list(itertools.combinations(' |
+ | >> [(' | ||
</ | </ | ||
=== Фильтрация последовательности === | === Фильтрация последовательности === | ||
- | + | Указывается пользовательская функция для проверки условия, | |
- | + | **filterfalse()**, | |
- | <code python> | + | |
- | </code> | + | |
- | + | ||
- | <code python> | + | |
- | </ | + | |
=== Прочие функции === | === Прочие функции === | ||
- | + | Несколько функций для работы с последовательностями: | |
- | + | **islice()**, | |
- | <code python> | + | |
- | </ | + | |
- | + | ||
- | <code python> | + | |
- | </ | + | |
- | + | ||
- | + | ||
===== Словари ===== | ===== Словари ===== | ||
+ | Ассоциативные массивы, | ||
+ | Объекты произвольного типа, неограниченная вложенность, | ||
+ | Фильтрация словаря (аналогично списку, | ||
<code python> | <code python> | ||
+ | dict_match_graph = {name_graph: | ||
</ | </ | ||
- | |||
- | <code python> | ||
- | </ | ||
- | |||
==== Создание словаря ==== | ==== Создание словаря ==== | ||
- | + | * **dict()** | |
- | + | * **{}** | |
- | <code python> | + | * **dict.fromkeys()** |
- | </ | + | * **copy(), deepcopy()** |
- | + | ||
- | <code python> | + | |
- | </ | + | |
==== Операции над словарями ==== | ==== Операции над словарями ==== | ||
- | + | Обращение по ключу, если элемента нет то будет исключение **KeyError**, | |
- | + | Проверка на вхождение- **in, not in**\\ | |
- | <code python> | + | * **setdefault(<key>, <default>)** - если ключ отсутствует, |
- | </code> | + | * **len()**- кол-во ключей в словаре\\ |
- | + | * **del()**- удаляет элемент (del d[' | |
- | <code python> | + | |
- | </code> | + | |
==== Перебор элементов словаря ==== | ==== Перебор элементов словаря ==== | ||
- | + | Метод **keys()** возвращает объект с ключами, | |
- | + | **sort()**, **sorted()** - метод и функция для сортировки ключей | |
- | <code python> | + | |
- | </ | + | |
<code python> | <code python> | ||
+ | for key in sorted(d.keys()): | ||
+ | print(" | ||
</ | </ | ||
==== Методы ==== | ==== Методы ==== | ||
- | + | * **keys(), values(), items()**- возвращает объект содержащий соответствующую перечень данных | |
- | + | * **pop(), popitem(), clear()**- удаление | |
- | <code python> | + | * **update()**- добавляет элементы в словарь, |
- | </ | + | * **copy(), get(), setdefault(), |
- | + | ||
- | <code python> | + | |
- | </ | + | |
==== Генераторы словарей ==== | ==== Генераторы словарей ==== | ||
+ | В отличии от генераторов списков, | ||
<code python> | <code python> | ||
- | </code> | + | arrkeys= [' |
+ | arrvalues= [' | ||
+ | {k: v for (k, v) in zip(arrkeys, | ||
+ | >> {' | ||
- | <code python> | + | {k:0 for k in arrkeys} |
+ | {' | ||
</ | </ | ||
- | |||
- | |||
- | <code python> | ||
- | </ | ||
- | |||
- | |||
- | <code python> | ||
- | </ | ||
- | |||
- | <code python> | ||
- | </ |