Работы со списками. Операции со списками. Генераторы выражения, позволяющие заполнить список некоторой формулой. Общий вид генератора следующий выражение for
Скачать 26.8 Kb.
|
Генераторы Для создания списка, заполненного одинаковыми элементами, можно использовать оператор повторения списка, например: а = [0] * n Для создания списков, заполненных по более сложным формулам, можно использовать генераторы — выражения, позволяющие заполнить список некоторой формулой. Общий вид генератора следующий: [выражение for переменная in список] Здесь переменная — идентификатор некоторой переменной, список — список значений, который принимает данная переменная (как правило, полученный при помощи функции range()), выражение — некоторое выражение, которым будут заполнены элементы списка, как правило, зависящее от использованной в генераторе переменной. Вот несколько примеров использования генераторов. Создать список, состоящий из n нулей можно и при помощи генератора: a = [0 for i in range(n)] Создать список, заполненный квадратами целых чисел, можно так: a = [i ** 2 for i in range(n)] Если нужно заполнить список квадратами чисел от 1 до n, то можно выражение следующим образом: a = [(i + 1) ** 2 for i in range(n)] Другим способом может быть изменение параметров функции range(): a = [i ** 2 for i in range(1, n + 1)] Таким образом можно генерировать достаточно сложные выражения и заполнять элементы списка по определенным правилам. Модуль random Иногда возникает необходимость использования случайных чисел. Для этого можно использовать, например, функцию randint из модуля random. В начале вашей программы следует подключить этот модуль с помощью команды: import random Пример: Смоделируем n бросков кубика, то есть сгенерируем список, заполненный случайными числами от 1 до 6 включительно: a = [random.randint(1, 6) for i in range(n)] Cчитывание данных Рассмотрим еще одно применение списочных выражений — считывание данных. Пусть список состоит из строк, которые состоят из чисел. Сначала нужно ввести число элементов списка (это значение будет использовано в качестве аргумента функции range()), потом — заданное количество строк. Программа для их считывания будет выглядеть следующим образом: a = [int(input()) for i in range(int(input()))] Если список чисел дан в одной строке через пробел, то можно использовать следующую конструкцию: a = list(map(int, input().split())). Используя генераторы, можно сделать то же самое с использованием следующей конструкции: a = [int(elem) for elem in input().split()] В данном случае индексная переменная elem принимает значения, равные элементам входной строки, разбитой пробелами. После преобразования этих элементов функцией int получим список из целых чисел. СрезыДля списков, как и для строк, определена операция взятия среза. А именно: a[i : j] — срез из j−i элементов: 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 может отсутствовать, что означает “начало списка” или “конец списка”. Списки, в отличие от строк, являются изменяемыми объектами: можно отдельному элементу списка присвоить новое значение. Можно поменять и целиком срез. Рассмотрим примеры: >>>a = [1, 2, 3, 4, 5, 6] >>>a[2 : 4] = [7, 8, 9, 10] >>>print(a) [1, 2, 7, 8, 9, 10, 5, 6] >>>a[-2 : ] = [] >>>print(a) [1, 2, 7, 8, 9, 10] >>>a[1 : : 2] = [11, 12, 13] >>>print(a) [1, 11, 7, 12, 9, 13] Если срезу с шагом k, отличным от 1, присвоить новое значение, то количество элементов в старом и новом срезе обязательно должно совпадать, в противном случае произойдёт ошибка ValueError. Обратите внимание, что операция обращения к элементу по индексу отличается от взятия среза. a[i] — это элемент списка, а не срез! >>>a = [1, 11, 7, 12, 9, 13] >>>a[2] = [14, 15] >>>print(a) [1, 11, [14, 15], 12, 9, 13] Со списками можно легко делать много разных операций. Рассмотрим основные из них:
|