Списки в списках
Списки могут состоять из скаляров (а именно чисел) и элементов гораздо более сложной структуры (Вы уже видели такие примеры, как строки, логические значения или даже другие списки в предыдущих заключающих уроках раздела). Давайте подробнее рассмотрим случай, когда элементы списка являются просто списками.
Такие массивы мы часто находим в своей жизни. Вероятно, лучший пример этого - шахматная доска.
Шахматная доска состоит из строк и столбцов. Всего восемь строк и восемь столбцов. Каждый столбец помечен буквами от A до H. Каждая строка отмечена цифрой от одного до восьми.
Расположение каждой клетки определяется парами букв и цифр. Таким образом, мы знаем, что левый нижний угол доски (с белой ладьей) - это А1, а противоположный угол - Н8.
Предположим, что мы можем использовать выбранные числа для представления любой шахматной фигуры. Мы также можем предположить, что каждая строка на шахматной доске представляет собой список.
Посмотрите на код ниже:
row = []
for i in range(8):
row.append(WHITE_PAWN)
Он создает список из восьми элементов, представляющих вторую строку шахматной доски - ту, которая заполнена пешками (предположим, что WHITE_PAWN
- предопределенный символ, представляющий белую пешку).
Тот же эффект может быть достигнут с помощью генератора списка, специального синтаксиса, используемого Python для заполнения огромных списков.
Генератор списка на самом деле является списком, но создается на ходу во время выполнения программы и не описывается статически.
Посмотрите на код:
row = [WHITE_PAWN for i in range(8)]
Часть кода, помещенная в скобки, указывает:
- данные, которые будут использоваться для заполнения списка (
WHITE_PAWN
) - выражение, определяющее, сколько раз данные встречаются внутри списка (
for i in range(8)
)
Взгляните на еще несколько примеров генерирования списка:
Пример #1:
squares = [x ** 2 for x in range(10)]
Код создает список из десяти элементов, заполненный квадратами из десяти целых чисел, начиная с нуля (0, 1, 4, 9, 16, 25, 36, 49, 64, 81).
Пример #2:
twos = [2 ** i for i in range(8)]
Код создает массив из восьми элементов, содержащий первые восемь степеней двойки (1, 2, 4, 8, 16, 32, 64, 128).
Пример #3:
odds = [x for x in squares if x % 2 != 0 ]
Код составляет список только из нечетных элементов списка squares
.