Главная страница

Работы со списками. Операции со списками. Генераторы выражения, позволяющие заполнить список некоторой формулой. Общий вид генератора следующий выражение for


Скачать 26.8 Kb.
НазваниеГенераторы выражения, позволяющие заполнить список некоторой формулой. Общий вид генератора следующий выражение for
АнкорРаботы со списками
Дата14.04.2022
Размер26.8 Kb.
Формат файлаdocx
Имя файлаОперации со списками.docx
ТипДокументы
#472136

Генераторы

Для создания списка, заполненного одинаковыми элементами, можно использовать оператор повторения списка, например:

а = [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]

Со списками можно легко делать много разных операций. Рассмотрим основные из них:

min(A)

Наименьший элемент списка. Элементы списка могут быть числами или строками, для строк сравнение элементов проводится в лексикографическом порядке.

max(A)

Наибольший элемент списка.

sum(A)

Сумма элементов списка. Элементы обязательно должны быть числами.

in A

Проверить, содержится ли элемент в списке. Возвращает True или False .

not in A

То же самое, что not(x in A).

A.index(x)

Индекс первого вхождения элемента x в список, при его отсутствии генерирует исключение ValueError.

A.count(x)

Количество вхождений элемента x в список.

A.append(x)

Добавить в конец списка A элемент x.

A.insert(i, x)

Вставить в список A элемент x на позицию с индексом i. Элементы списка A, которые до вставки имели индексы i и больше, сдвигаются вправо.

A.extend(B)

Добавить в конец списка A содержимое списка B.

A.pop()

Удалить из списка последний элемент, возвращается значение удалённого элемента.

A.pop(i)

Удалить из списка элемент с индексом i, возвращается значение удаленного элемента. Все элементы, стоящие правее удаленного, сдвигаются влево.

A.remove(x)

Удаляет первое вхождение элемента x. Если элемента x нет в списке,то получаем ошибку во время выполнения.


написать администратору сайта