## ++Тема 8++<br>Списки и массивы (c) Яценко Р.Н., 2019-2020 --- ## 1. Списки ---- ### Назначение списков - Во многих задачах нужно сохранять всю обрабатываемую последовательность элементов в памяти, например, если бы нам требовалось отсортировать все элементы последовательности - Для хранения таких данных можно использовать структуру данных, называемую в Python *список* (в большинстве языков программирования используется термин “массив”) ---- ### Создание списка - Список представляет собой последовательность элементов, пронумерованных от 0, как символы в строке - Список можно задать перечислением элементов списка в квадратных скобках: ```python= Primes = [2, 3, 5, 7, 11, 13] print(Primes[0], Primes[1], Primes[2], Primes[3], Primes[4], Primes[5]) print(Primes[-1], Primes[-6]) Rainbow = ['Red', 'Orange', 'Yellow', 'Green', 'Blue', 'Indigo', 'Violet'] print(Rainbow) ``` ``` 2 3 5 7 11 13 13 2 ['Red', 'Orange', 'Yellow', 'Green', 'Blue', 'Indigo', 'Violet'] ``` ---- ### Длина списка Длину списка, то есть количество элементов в нем, можно узнать при помощи функции `len`: ```python= Rainbow = ['Red', 'Orange', 'Yellow', 'Green', 'Blue', 'Indigo', 'Violet'] print(Rainbow[0]) Rainbow[0] = 'красный' print('Выведем радугу') for i in range(len(Rainbow)): print(Rainbow[i]) ``` ``` Red Выведем радугу красный Orange Yellow Green Blue Indigo Violet ``` ---- ### Пример 1 Считывание списка с известным количеством элементов. Исходные данные: ``` 5 1809 1854 1860 1891 1925 ``` ```python= a = [] # заводим пустой список n = int(input()) # считываем количество элементов в списке for i in range(n): new_element = int(input()) # считываем очередной элемент a.append(new_element) # добавляем его в список print(a) ``` ``` [1809, 1854, 1860, 1891, 1925] ``` ---- ### Пример 1 Сокращенная версия ``` 5 1809 1854 1860 1891 1925 ``` ```python= a = [] for i in range(int(input())): a.append(int(input())) print(a) ``` ``` [1809, 1854, 1860, 1891, 1925] ``` ---- ### Операции над списками - сложение списков, т. е. соединение списков - повторение списков (умножение списка на число) ```python= a = [1, 2, 3] b = [4, 5] c = a + b print(c) d = b * 3 print(d) print([7, 8] + [9]) print([0, 1] * 3) ``` ``` [1, 2, 3, 4, 5] [4, 5, 4, 5, 4, 5] [7, 8, 9] [0, 1, 0, 1, 0, 1] ``` ---- ### Пример 1 Версия с поэлементным изменением. Исходные данные: ``` 5 1809 1854 1860 1891 1925 ``` ```python= a = [0] * int(input()) for i in range(len(a)): a[i] = int(input()) print(a) ``` ``` [1809, 1854, 1860, 1891, 1925] ``` ---- ### Пример 2 Вывод списка - В столбик: ```python= a = [1, 2, 3, 4, 5] for i in range(len(a)): print(a[i]) ``` ``` 1 2 3 4 5 ``` ---- - В строку: ```python= a = [1, 2, 3, 4, 5] for elem in a: print(elem, end=' ') ``` ``` 1 2 3 4 5 ``` --- ## 2. Методы split и join ---- ### Метод split (разделение) - Элементы списка можно целиком считать функцией `input()` как строку - После этого можно использовать метод строки `split()`, возвращающий список строк, которые получатся, если исходную строку разрезать на части по пробелам: ```python= s = input() # s == '1 2 3' a = s.split() # a == ['1', '2', '3'] print(a) ``` ``` ['1', '2', '3'] ``` ---- ### Пример 3 Считывание списка с неизвестным количеством элементов в строку. Исходные данные: ``` 1809 1854 1860 1891 1925 ``` ```python= a = input().split() for i in range(len(a)): a[i] = int(a[i]) print(a) ``` ``` [1809, 1854, 1860, 1891, 1925] ``` ---- ### Разделитель для метода split У метода `split()` есть необязательный параметр, который определяет, какая строка будет использоваться в качестве разделителя между элементами списка: ```python= a = '192.168.0.1'.split('.') print(a) ``` ``` ['192', '168', '0', '1'] ``` ---- ### Метод join (соединение) Метод `join` возвращает строку, полученную соединением элементов переданного списка в одну строку, при этом между элементами списка вставляется разделитель, равный той строке, к которой применяется метод: ```python= a = ['red', 'green', 'blue'] print(' '.join(a)) print(''.join(a)) print('***'.join(a)) ``` ``` red green blue redgreenblue red***green***blue ``` --- ## 3. Операции со списками ---- ### Срезы - `A[i:j]` срез из `j-i` элементов `A[i], A[i+1], ..., A[j-1]` - `A[i:j:-1]` срез из `i-j` элементов `A[i], A[i-1], ..., A[j+1]` (то есть меняется порядок элементов) - `A[i:j:k]` срез с шагом `k`: `A[i], A[i+k], A[i+2*k]`,... . Если значение `k<0`, то элементы идут в противоположном порядке. Каждое из чисел `i` или `j` может отсутствовать, что означает “начало списка” или “конец списка” ---- ### Пример 4 Срезы ```python= a = [10, 20, 30, 40, 50, 60] print(a[1:4]) print(a[4::-1]) print(a[:4:2]) print(a[::3]) s = 'abcdef' print(s[1:4]) print(s[1:]) print(s[:4]) ``` ``` [20, 30, 40] [50, 40, 30, 20, 10] [10, 30] [10, 40] bcd bcdef abcd ``` ---- ### Пример 5 Изменение срезов ```python= A = [1, 2, 3, 4, 5] A[2:4] = [7, 8, 9] print(A) A = [1, 2, 3, 4, 5, 6, 7] A[::2] = [10, 20, 30, 40] print(A) A = [1, 2, 3, 4, 5, 6, 7] A[::-2] = [10, 20, 30, 40] print(A) ``` ``` [1, 2, 7, 8, 9, 5] [10, 2, 20, 4, 30, 6, 40] [40, 2, 30, 4, 20, 6, 10] ``` ---- ### Другие операции | | | |-|----| |`x in A`|Проверить, содержится ли элемент в списке (`True/False`)| |`x not in A`|То же самое, что `not(x in A)`| |`min(A)`|Наименьший элемент списка| |`max(A)`|Наибольший элемент списка| |`A.index(x)`|Индекс первого вхождения элемента x в список| |`A.count(x)`|Количество вхождений элемента x в список| --- ## 4. Генераторы списков ---- ### Синтаксис генератора _Генераторы_ -- это выражения, позволяющие заполнить список по формуле: ```python [выражение for переменная in последовательность] ``` - _переменная_ -- идентификатор переменной - _последовательность_ -- последовательность значений, что принимает переменная (список, строка или объект, полученный при помощи функции `range`) - _выражение_ -- некоторое выражение, которым будут заполнены элементы списка, зависящее от переменной ---- ### Пример 6 Создание списков при помощи генераторов ```python= a = [0 for i in range(5)] print(a) n = 5 a = [i ** 2 for i in range(n)] print(a) n = 5 a = [i ** 2 for i in range(1, n + 1)] print(a) ``` ``` [0, 0, 0, 0, 0] [0, 1, 4, 9, 16] [1, 4, 9, 16, 25] ``` ---- #### Пример 7 Создание списка из случайных чисел ```python= from random import randrange n = 10 a = [randrange(1, 10) for i in range(n)] print(a) ``` ``` [4, 9, 5, 8, 9, 9, 2, 8, 6, 3] ``` ---- ### Пример 8 Считывание списков при помощи генераторов - Неизвестное количество элементов: ``` 1809 1854 1860 1891 1925 ``` ```python= a = [int(s) for s in input().split()] print(a) ``` ``` [1809, 1854, 1860, 1891, 1925] ``` ---- - Заданное количество элементов: ``` 5 1809 1854 1860 1891 1925 ``` ```python= a = [int(input()) for i in range(int(input()))] print(a) ``` ``` [1809, 1854, 1860, 1891, 1925] ``` ---- ### Пример 9 Вывод списка чисел при помощи генератора ```python= a = [1, 2, 3] print(' '.join([str(i) for i in a])) ``` ``` 1 2 3 ``` --- ## Спасибо за внимание! ![](https://i.imgur.com/gKDsna4.png) (c) Яценко Р.Н., 2019-2020
{"metaMigratedAt":"2023-06-15T15:28:53.242Z","metaMigratedFrom":"YAML","title":"Тема 8. Списки и массивы","breaks":false,"slideOptions":"{\"allottedMinutes\":80,\"slideNumber\":\"c\",\"theme\":\"beige\",\"transition\":\"slide\",\"spotlight\":{\"enabled\":true}}","contributors":"[{\"id\":\"93a8c43f-1b5b-4461-9101-89b183ccbc1c\",\"add\":8739,\"del\":1340}]"}
    610 views