Работа со списками в Python

User Rating: 0 / 5

Списки (англ. Lists) в Python относятся к составным типам данных, которые используются для группировки других значений.

Чтобы задать список в Python достаточно перечислить значения через запятую и заключить их в квадратные скобки. Списки могут содержать значения разных типов данных, но как правило они содержат значения одного типа данных.

Посмотрим на следующий пример:

if __name__ == '__main__':
    integer_list = [1, 2, 3, 4, 5, 6]
    print(integer_list)

Здесь мы задаём список с именем integer_list, состоящий из нескольких чисел и выводим его на экран:

[1, 2, 3, 4, 5, 6]

Так же, как и строки (и все другие встроенные типы данных, относящиеся к последовательностям), списки могут быть индексированы и нарезаны.

Давайте посмотрим, как можно быстро получить доступ к элементу списка или вернуть определённое подмножество (нарезку) из списка:

if __name__ == '__main__':
    integer_list = [1, 2, 3, 4, 5, 6]
    print(integer_list)
    print(integer_list[2])
    print(integer_list[4:])

На экран будет выведено следующее:

[1, 2, 3, 4, 5, 6]
3
[5, 6]

На второй строке вывода на консоль видим 3, поскольку это значение элемента списка с индексом 2 (помним, что индексы начинаются с 0, а не с 1).

На последней строке вывода на консоль видим подмножество значений списка [5, 6], т.к. это нарезка от исходного списка, начиная с позиции индекса 4 (что соответствует элементу 5) и до конца списка, т.к. в нарезке отсутствует конечный индекс после знака двоеточия.

Мы можем также использовать нарезку от исходного списка без указания начального и конечного индексов:

if __name__ == '__main__':
    integer_list = [1, 2, 3, 4, 5, 6]
    print(integer_list[:])

На консоль будет выведено следующее:

[1, 2, 3, 4, 5, 6]

В данном случае нарезка без указания индексов возвращает неглубокую копию (англ. "shallow copy") нашего исходного списка integer_list и выводит её содержимое на экран.

Списки, так же как и строки, поддерживают операцию конкатенации, или сцепки. Посмотрим на примере:

if __name__ == '__main__':
    integer_list = [1, 2, 3, 4, 5, 6]
    other_list = integer_list + [7, 8, 9, 10]
    print(other_list)

При запуске скрипта, на консоли отобразится:

[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

В отличие от строк, которые являются неизменными (immutable), списки в Python являются изменяемым (mutable) типом данных. То есть мы вполне легко можем изменить их значение.

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

if __name__ == '__main__':
    integer_list = [1, 2, 3, 4, 5, 6]
    integer_list[3] = 44
    print(integer_list)

В этом примере мы меняем значение элемента списка с индексом 3 (в этой позиции списка хранится значение 4) на значение 44. Результат - изменённый список, который мы и выводим на экран при помощи метода print():

[1, 2, 3, 44, 5, 6]

Кроме конкатенации, которую уже рассмотрели выше, значения в список можно добавлять с помощью метода append():

if __name__ == '__main__':
    integer_list = [1, 2, 3, 4, 5, 6]
    print("Исходный список: " + str(integer_list))
    integer_list.append(7)
    integer_list.append(8)
    print("Изменённый список: " + str(integer_list))

При запуске скрипта на консоль будет выведено:

Исходный список: [1, 2, 3, 4, 5, 6]
Изменённый список: [1, 2, 3, 4, 5, 6, 7, 8]

Присвоение значение нарезкам из списка также возможно. Посмотрим пример:

if __name__ == '__main__':
    integer_list = [1, 2, 3, 4, 5, 6]
    print("Исходный список: " + str(integer_list))
    integer_list[1:4] = [22, 33, 44]
    print("Изменённый список: " + str(integer_list))

Результатом на экране консоли будет:

Исходный список: [1, 2, 3, 4, 5, 6]
Изменённый список: [1, 22, 33, 44, 5, 6]

Т.е. как видим, мы подменили значения 2, 3 и 4 в исходном списке на 22, 33 и 44, соответственно.

Так же, как и изменение списка выше, можно нарезке присвоить пустой список, это приведёт к удалению элементов списка:

if __name__ == '__main__':
    integer_list = [1, 2, 3, 4, 5, 6]
    print("Исходный список: " + str(integer_list))
    integer_list[1:4] = [22, 33, 44]
    print("Изменённый список: " + str(integer_list))
    integer_list[1:4] = []
    print("Список с удалёнными элементами: " + str(integer_list))

Результатом выполнения скрипта будет следующий вывод в консоли:

Исходный список: [1, 2, 3, 4, 5, 6]
Изменённый список: [1, 22, 33, 44, 5, 6]
Список с удалёнными элементами: [1, 5, 6]

Если хочется очистить список вовсе, можно присвоить нарезке значение пустого списка:

if __name__ == '__main__':
    integer_list = [1, 2, 3, 4, 5, 6]
    print("Исходный список: " + str(integer_list))
    integer_list[:] = []
    print("Очищенный список: " + str(integer_list))

Смотрим на результаты в консоли:

Исходный список: [1, 2, 3, 4, 5, 6]
Очищенный список: []

Одной из очень крутых, на мой взгляд, "фишек" в Python является то, что можно создавать вложенные списки, то есть списки, содержащие списки. Взглянем, как это делается:

if __name__ == '__main__':
    numbers = [1, 2, 3, 4]
    letters = ['a', 'b', 'c', 'd']
    mixed = [numbers, letters]
    print("Вложенные списки: " + str(mixed))

Давайте посмотрим, что у нас вывелось на консоль:

Вложенные списки: [[1, 2, 3, 4], ['a', 'b', 'c', 'd']]

Обратите внимание, всего в несколько строк кода мы создали смешанный список из двух вложенных, один из которых содержит цифры, второй - буквы.

Наконец, к спискам, так же как и к строкам, применима встроенная функция len(), которая, как легко догадаться, вычисляет размер списка. Давайте немного дополним предыдущий пример, чтобы вывести итоговый размер получившегося ранее смешанного списка:

if __name__ == '__main__':
    numbers = [1, 2, 3, 4]
    letters = ['a', 'b', 'c', 'd']
    mixed = [numbers, letters]
    print("Вложенные списки: " + str(mixed))
    print("Размер конечного списка: " + str(len(mixed)))

Как вы думаете, какой будет результат на экране консоли? Если ответили 2, то угадали:

Вложенные списки: [[1, 2, 3, 4], ['a', 'b', 'c', 'd']]
Размер конечного списка: 2

Почему именно 2? Потому что конечный список состоит из двух вложенных, т.е. здесь главное учитывать, что подсчитывается не общее количество всех элементов во вложенных списках, а именно количество вложенных списков внутри нашего смешанного.

Если мы всё же хотим добраться до общего количества всех вложенных элементов, сделаем это чуть иначе:

if __name__ == '__main__':
    numbers = [1, 2, 3, 4]
    letters = ['a', 'b', 'c', 'd']
    mixed = [numbers, letters]
    print("Вложенные списки: " + str(mixed))
    print("Размер конечного списка: " + str(len(mixed)))
    print("Количество всех вложенных элементов: " + str(len(mixed[0]) + len(mixed[1])))
Вложенные списки: [[1, 2, 3, 4], ['a', 'b', 'c', 'd']]
Размер конечного списка: 2
Количество всех вложенных элементов: 8

Теперь мы подсчитали общее количество элементов - для этого пришлось сложить результаты len() от вложенных списков и привести эту сумму к строке с помощью встроенной функции str(), ну и, конечно, сцепить её со строкой, говорящей нам про общее количество всех вложенных элементов.

Мы рассмотрели основные операции со списками на Python, и этого уже должно быть достаточно, чтобы начать первые эксперименты и начать использовать списки в Ваших Python-скриптах!

Надеюсь, статья понравилась. Делитесь своими мыслями и опытом использования списков в комментариях.

Яндекс.Метрика