Инструменты пользователя

Инструменты сайта


develop:pyton:lists

Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

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