List() - списки (массивы, последовательности)

Список в Python – это встроенный тип (класс) данных, представляющий собой одну из разновидностей структур данных. Структуру данных можно представить как сложную единицу, объединяющую в себе группу более простых. Список – это изменяемая последовательность произвольных элементов.

В подавляющем большинстве других языков программирования есть такой широко используемый тип данных как массив. В Питоне такого встроенного типа нет. Однако списки – это по своей сути массивы за одним исключением. Составляющие массив элементы должны принадлежать одному типу данных, для python-списков такого ограничения нет.

Например, массив может содержать только целые числа или только вещественные числа или только строки. Список также может содержать элементы только одного типа, что делает его внешне неотличимым от массива. Но вполне допустимо, чтобы в одном списке содержались как числа, так и строки, а также что-нибудь еще.

Создание и чтение списка

Создавать списки можно разными способами. Создадим его простым перечисление элементов:

a = [12, 3.85, "black", -4]
print(a)       # [12, 3.85, 'black', -4]
1
2

Итак, у нас имеется список, присвоенный переменной a. В Python список определяется квадратными скобками. Он содержит четыре элемента. Если где-то в программе нам понадобится весь этот список, мы получим доступ к нему, указав всего лишь одну переменную – a.

Элементы в списке упорядочены, имеет значение в каком порядке они расположены. Каждый элемент имеет свой индекс, или номер. Индексация начинается с нуля. В данном случае число 12 имеет индекс 0, строка «black» – индекс 2. Чтобы извлечь конкретный элемент, надо после имени переменной указать в квадратных скобках индекс необходимого элемента:

print(a[0])         # 12
print(a[3])         # -4
1
2

В Python существует также индексация с конца. Она начинается с -1:

print(a[-1])            # -4
print(a[-2])            # 'black'
print(a[-3], a[-4])     # 3.85 12
1
2
3

Изменение списка

Часто требуется извлечь не один элемент, а так называемый срез – часть списка. В этом случае указывается индекс первого элемента среза и индекс следующего за последним элементом среза:

print(a[0:2])       # [12, 3.85]
1

В данном случае извлекаются первые два элемента с индексами 0 и 1. Элемент с индексом 2 в срез уже не входит. В таком случае возникает вопрос, как извлечь срез, включающий в себя последний элемент? Если какой-либо индекс не указан, то считается, что имеется в виду начало или конец:

print(a[:3])        # [12, 3.85, 'black']
print(a[2:])        # ['black', -4]
print(a[:])         # [12, 3.85, 'black', -4]
1
2
3

Списки изменяемы. Это значит, что в них можно добавлять элементы, удалять их, изменять существующие. Проще всего изменить значение элемента. Для этого надо обратиться к нему по индексу и перезаписать значение в заданной позиции:

a[1] = 4
print(a)            # [12, 4, 'black', -4]
1
2

Добавлять и удалять лучше с помощью специальных встроенных методов списка. Выполните следующий код и напишите комментарий к каждому методу списка, что именно он делает:

a.append('wood')
print(a)                # [12, 4, 'black', -4, 'wood']

a.insert(1, 'circle')
print(a)                # [12, 'circle', 4, 'black', -4, 'wood']

a.remove(4)
print(a)                # [12, 'circle', 'black', -4, 'wood']

print(a.pop())          # 'wood'
print(a)                # [12, 'circle', 'black', -4]
print(a.pop(2))         # 'black'
print(a)                # [12, 'circle', -4]
1
2
3
4
5
6
7
8
9
10
11
12
13

Перечень всех методов списка можно узнать с помощью встроенной в Python функции dir(), передав в качестве аргумента переменную, связанную со списком, или название класса (в данном случае – list). В полученном из dir() списке надо смотреть имена без двойных подчеркиваний.

Для получения информации о конкретном методе следует воспользоваться встроенной функцией help(), передав ей в качестве аргумента имя метода, связанное с объектом или классом. Например, help(a.pop) или help(list.index). Выход из справки – q.

Можно изменять списки не используя методы, а с помощью взятия и объединения срезов:

b = [1, 2, 3, 4, 5, 6]
b = b[:2] + b[3:]
print(b)                # [1, 2, 4, 5, 6]
1
2
3

Здесь берется срез из первых двух элементов и срез, начиная с четвертого элемента (индекс 3) и до конца. После чего срезы объединяются с помощью оператора «сложения».

Можно изменить не один элемент, а целый срез:

mylist = ['ab','ra','ka','da','bra']
mylist[0:2] = [10,20]
print(mylist)       # [10, 20, 'ka', 'da', 'bra']
1
2
3

Пример создания пустого списка с последующим заполнением его в цикле случайными числами:

import random

c = []
i = 0
while i < 10:
     c.append(random.randint(0,100))
     i += 1

print(c)        # [30, 44, 35, 77, 53, 44, 49, 17, 61, 82]
1
2
3
4
5
6
7
8
9

Упражнения

  1. Напишите программу, которая просит пользователя ввести три числа, добавляет их в список. На экран выводит список целиком, сумму значений, максимальное и минимальное значения в списке. Для нахождения суммы, максимума и минимума воспользуйтесь встроенными в Python функциями sum(), max() и min().

    Пример выполнения:

    Enter the first number: 4
    Enter the second number: 1.1
    Enter the third number: -9
    [4, 1.1, -9]
    Sum: -3.9
    Max: 4
    Min: -9
    
    1
    2
    3
    4
    5
    6
    7
  2. Напишите программу, которая выводит: сумму, максимальное и минимальное из исходных чисел: a=54, b=87.

  3. Напишите программу со списком из 30 произвольных неупорядоченных чисел. Выводите получившийся список на экран по десять элементов в ряд. Далее сортирует список с помощью метода sort() и снова выводит его на экран по десять элементов в строке.