Step 8 (S-14682)

From Stepik Wiki
Jump to: navigation, search

Step on Stepik: https://stepik.org/lesson/3368/step/8

S-14682-1.png

Списки потенциально могут содержать огромное количество элементов. Поэтому задавать списки, явно указывая элементы через запятую, в вашей программе, как правило, не имеет смысла. В большинстве случаев значения элементов списка вы будете формировать, либо читая данные с клавиатуры (или файла), либо генерировать значения списка, добавляя их по одному с помощью цикла. Либо можно использовать специальные конструкции, генерирующие списки. Например, если нужно сгенерировать список состоящий из одинаковых элементов, то можно использовать умножение списка на целое число:

S-14682-2.png

Данный код генерирует список, состоящий из пяти нулей. Если необходимо создать более сложные списки, мы можем использовать генераторы списков (list comprehension). В общем случае эта конструкция устроена так.

S-14682-3.png

Мы задаем некую переменную i и с помощью ключевого слова in и последовательности sequence указываем, какие значения она будет принимать. Далее мы задаем выражение action (как правило зависит от переменной i), которое вычисляет элементы списка для всех значений i.

Рассмотрим несколько примеров.

S-14682-4.png

В данном случае переменная i принимает значения от 0 до 4 включительно. Для каждого значения i вычисляется значение выражения, которое в данном примере равно 0. Таким образом мы получаем список состоящий из 5 элементов, каждый из которых имеет значение 0.

В следующем примере, мы генерируем список квадратов целых чисел. Переменная i принимает значения аналогичные тем, что были в предыдущем примере. Для каждого значения i мы вычисляем его квадрат: i * i. Таким образом, на выходе получаем список - [0, 1, 4, 9, 16].

S-14682-5.png

С конструкцией list comprehension мы уже сталкивались, когда производили чтение двух чисел из одной строки:

S-14682-6.png

Если чисел в одной строке - произвольное количество, удобнее будет сохранить их в списке, и конструкция примет вид:

S-14682-7.png

Это стандартная конструкция часто используется на практике. Напомним, как это работает. Функция input читает строку, метод split разбивает ее по пробельным символам, создавая последовательность. Далее к каждому элементу полученной последовательности применяется функция преобразования к целому числу int. В итоге мы получаем список всех чисел, которые были введены в одной строке.