Операции со списками в Python

Материал из Викижурнал
Перейти к навигации Перейти к поиску
Операции со списками в Python
Операции со списками в Python
Тематические порталы

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

Например, вы можете создать игру, в которой игрок должен отстреливать инопланетян с неба. Вы можете сохранить первоначальный набор инопланетян в списке и затем удалять инопланетян из списка каждый раз, когда их сбивают. Каждый раз, когда на экране появляется новый инопланетянин, вы добавляете его в список. Ваш список инопланетян будет уменьшаться и увеличиваться в течение игры.

Изменение элементов в списке

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

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

Самый простой способ добавить новый элемент в список - использовать специальный для этого оператор "append". Когда вы добавляете элемент в список, он добавляется в конец списка. Используя тот же список, что и в статье "Списки в Python", мы добавим новый элемент 'ducati' в его конец:

motorcycles = ['honda', 'yamaha', 'suzuki']
print(motorcycles)

motorcycles.append('ducati')
print(motorcycles)

Метод append () добавляет 'ducati' в конец списка, не затрагивая другие элементы в списке и получаем вот такой результат:

['honda', 'yamaha', 'suzuki']
['honda', 'yamaha', 'suzuki', 'ducati']

Метод append () позволяет легко создавать списки динамически. Например, вы можете начать с пустого списка, а затем добавить элементы в список с помощью ряда операторов append (). Используя пустой список, давайте добавим в список элементы «honda», «yamaha» и «suzuki»:

motorcycles = []
motorcycles.append('honda')
motorcycles.append('yamaha')
motorcycles.append('suzuki')
print(motorcycles)

В итоге список выглядит точно так же, как списки в предыдущих примерах:

['honda', 'yamaha', 'suzuki']

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

Вставка элементов в список

Вы можете добавить новый элемент в любую позицию списка, используя метод insert (). Это можно сделать, указав индекс нового элемента и значение нового элемента.

motorcycles = ['honda', 'yamaha', 'suzuki']
motorcycles.insert(0, 'ducati')
print(motorcycles)

В этом примере код вставляет значение «ducati» в начале списка. Метод insert () открывает пробел в позиции 0 и сохраняет значение 'ducati' в этом месте. Эта операция сдвигает все остальные значения в списке на одну позицию вправо. В итоге получаем вот такой результат:

['ducati', 'honda', 'yamaha', 'suzuki']

Удаление элементов из списка

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

Удаление элемента с помощью оператора "del"

Если вам известна позиция элемента, который вы хотите удалить из списка, вы можете использовать оператор "del".

motorcycles = ['honda', 'yamaha', 'suzuki']
print(motorcycles)
del motorcycles[0]
print(motorcycles)

Код использует "del" для удаления первого элемента, «honda», из списка мотоциклов и получаем соответствующий результат:

['honda', 'yamaha', 'suzuki']
['yamaha', 'suzuki']

Вы можете удалить элемент из любой позиции в списке, используя оператор del, если вы знаете его индекс. Например, вот как удалить второй элемент "yamaha" из списка:

motorcycles = ['honda', 'yamaha', 'suzuki']
print(motorcycles)
del motorcycles[1]
print(motorcycles)

Второй мотоцикл удален из списка и получаем результат:

['honda', 'yamaha', 'suzuki']
['honda', 'suzuki']

Примечание: В обоих примерах вы больше не можете получить доступ к значению, которое было удалено из списка после использования оператора "del".

Удаление элемента с помощью оператора pop ()

Иногда есть необходимость использовать значение элемента после его удаления из списка. Например, вы можете получить координаты x и y в корабля пришельца в нашей воображаемой игре, который только что сбили, чтобы вы могли нарисовать взрыв в этой позиции. В веб-приложении, например, может потребоваться удалить пользователя из списка активных участников, а затем добавить этого пользователя в список неактивных участников.

Метод pop () удаляет последний элемент в списке, но позволяет вам работать с этим элементом после его удаления. Термин «pop» происходит от того, что вы думаете о списке как о пачке предметов и выталкиваете один предмет из верхней его части. Давайте удалим мотоцикл из нашего списка:

motorcycles = ['honda', 'yamaha', 'suzuki']
print(motorcycles)
popped_motorcycle = motorcycles.pop()
print(motorcycles)
print(popped_motorcycle)

Начнем с определения и вывода списка мотоциклов, затем мы извлекаем значение из списка и сохраняем его в переменной "popped_motorcycle". Далее выводим список, чтобы показать, что значение было удалено из списка. Затем мы выводим удалённое значение, чтобы доказать, что у нас все еще есть доступ к удаленному значению. Вывод показывает, что значение "suzuki" было удалено из конца списка и теперь хранится в переменной "popped_motorcycle":

['honda', 'yamaha', 'suzuki']
['honda', 'yamaha']
suzuki

Чем ещё может быть полезен метод pop ()? Представьте, что мотоциклы в списке хранятся в хронологическом порядке в зависимости от того, когда мы владели ими. Если это так, мы можем использовать метод pop (), чтобы напечатать инструкцию о последнем мотоцикле, который мы купили:

motorcycles = ['honda', 'yamaha', 'suzuki']
last_owned = motorcycles.pop()
print("The last motorcycle I owned was a " + last_owned.title() + ".")

Вывод представляет собой простое предложение о самом последнем мотоцикле, который у нас был:

The last motorcycle I owned was a Suzuki.

Удаление элементов из любой позиции в списке

На самом деле вы можете использовать pop () для удаления элемента в списке в любой позиции, включив в скобки индекс элемента, который вы хотите удалить.

motorcycles = ['honda', 'yamaha', 'suzuki']
first_owned = motorcycles.pop(0)
print('The first motorcycle I owned was a ' + first_owned.title() + '.')

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

The first motorcycle I owned was a Honda.

Помните, что каждый раз, когда вы используете pop (), элемент, с которым вы работаете, больше не сохраняется в списке, но он доступен в другой переменной. Если вы не уверены, использовать ли оператор del или метод pop (), вот простой способ, чтобы решить: когда вы хотите удалить элемент из списка и никоим образом не использовать этот элемент, используйте оператор del; если вы хотите использовать элемент при его удалении, используйте метод pop ().

Удаление элемента по значению

Иногда вы не знаете положение элемента в списке, которое хотите удалить из него. Если вам известно только значение элемента, который вы хотите удалить, вы можете использовать метод remove (). Например, допустим, мы хотим удалить значение «ducati» из списка мотоциклов.

motorcycles = ['honda', 'yamaha', 'suzuki', 'ducati']
print(motorcycles)
motorcycles.remove('ducati')
print(motorcycles)

Код сообщает Python, чтобы выяснить, где в списке появляется «ducati», и удалить этот элемент:

['honda', 'yamaha', 'suzuki', 'ducati']
['honda', 'yamaha', 'suzuki']

Вы также можете использовать метод remove () для работы со значением, которое удаляется из списка. Давайте удалим значение "ducati" и напишем причину его удаления из списка:

motorcycles = ['honda', 'yamaha', 'suzuki', 'ducati']
print(motorcycles)
too_expensive = 'ducati'
motorcycles.remove(too_expensive)
print(motorcycles)
print("\nA " + too_expensive.title() + " is too expensive for me.")

После определения списка мы сохраняем значение "ducati" в переменной с именем "too_expensive". Затем используйте эту переменную, чтобы сообщить Python, какое значение удалить из списка. Значение "ducati" было удалено из списка, но все еще сохраняется в переменной "too_expensive", что позволяет нам распечатать заявление о том, почему мы удалили "ducati" из списка мотоциклов:

['honda', 'yamaha', 'suzuki', 'ducati']
['honda', 'yamaha', 'suzuki']
A Ducati is too expensive for me.

Примечание: Метод remove () удаляет только первое вхождение указанного вами значения. Если существует вероятность, что значение появляется в списке более одного раза, нужно использовать циклы, чтобы определить, все ли значения этого значения были удалены. Вы узнаете, как это сделать, в статье Циклы в Python.

Работа над списком

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

Постоянная сортировка списка с помощью метода sort ()

Метод sort () позволяет относительно легко сортировать список. Представьте, что у нас есть список автомобилей, и мы хотим представить его в алфавитном порядке. Чтобы упростить задачу, давайте предположим, что все значения в списке строчные.

cars = ['bmw', 'audi', 'toyota', 'subaru']
cars.sort()
print(cars)

Метод sort (), показанный в примере, хранит перечень автомобилей в алфавитном порядке, и далее нельзя его переделать к первоначальному состоянию:

['audi', 'bmw', 'subaru', 'toyota']

Вы также можете отсортировать этот список в обратном алфавитном порядке, передав аргумент reverse = True методу sort (). Следующий пример сортирует список автомобилей в обратном алфавитном порядке:

cars = ['bmw', 'audi', 'toyota', 'subaru']
cars.sort(reverse=True)
print(cars)

И получаем вот такой соответствующий вывод данных:

 ['toyota', 'subaru', 'bmw', 'audi']

Временная сортировка списка с помощью функции sorted ()

Чтобы сохранить первоначальный порядок списка, но представить его в отсортированном порядке, вы можете использовать функцию sorted (). Функция sorted () позволяет вам отображать ваш список в определенном порядке, но не влияет на фактический порядок списка. Давайте попробуем эту функцию в списке автомобилей:

cars = ['bmw', 'audi', 'toyota', 'subaru']
print("Here is the original list:")
print(cars)

print("\nHere is the sorted list:")
print(sorted(cars))

print("\nHere is the original list again:")
print(cars)

Сначала мы печатаем список в исходном порядке, а затем в алфавитном порядке. После отображения списка в новом порядке, мы показываем, что список все еще сохраняется в своем первоначальном порядке.

Here is the original list:
['bmw', 'audi', 'toyota', 'subaru']

Here is the sorted list:
['audi', 'bmw', 'subaru', 'toyota']

Here is the original list again:
['bmw', 'audi', 'toyota', 'subaru']

Обратите внимание, что список все еще существует в своем первоначальном порядке после использования функции sorted (). Функция sorted () также может принимать аргумент reverse = True, если вы хотите отобразить список в обратном алфавитном порядке.

Примечание: Сортировка списка по алфавиту немного сложнее, когда все значения не в нижнем регистре. Есть несколько способов интерпретировать заглавные буквы, когда вы выбираете порядок сортировки, и указание точного порядка может быть более сложным, чем мы хотим сделать в данный момент. Однако большинство подходов к сортировке будут основываться непосредственно на том, что вы узнали в этом разделе.

Вывод списка в обратном порядке

Чтобы изменить исходный порядок списка, вы можете использовать метод reverse (). Если бы мы изначально хранили список автомобилей в хронологическом порядке в соответствии с тем, когда мы его составляли, мы можем легко перестроить список в обратном хронологическом порядке:

cars = ['bmw', 'audi', 'toyota', 'subaru']
print(cars)
cars.reverse()
print(cars)

Обратите внимание, что reverse () не сортирует в обратном порядке по алфавиту; он просто меняет порядок списка:

['bmw', 'audi', 'toyota', 'subaru']
['subaru', 'toyota', 'audi', 'bmw']

Метод reverse () постоянно меняет порядок списка, но вы можете в любое время вернуться к исходному порядку, применив reverse () к тому же списку во второй раз.

Определение длины списка

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

cars = ['bmw', 'audi', 'toyota', 'subaru']
print(len(names))

Соотвественно получаем вывод:

4

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

Примечание

Основная статья: Циклы со списками в Python
Основная статья: Дополнительные операции со списками в Python

В этой статье вы узнали, что такое списки и как работать с отдельными элементами в списке. Вы узнали, как определить список и как добавлять и удалять элементы в нём. Вы научились сортировать списки постоянно и временно для отображения.

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

Другие статьи о Python