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