Операции со списками в 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 ()
полезна, например в нашей воображаемой игре нужно определить количество инопланетян, которые все еще необходимо сбить, или определить количество данных, которыми вы должны управлять в визуализации, или выяснить количество зарегистрированных пользователи на сайте и так далее.
Примечание
В этой статье вы узнали, что такое списки и как работать с отдельными элементами в списке. Вы узнали, как определить список и как добавлять и удалять элементы в нём. Вы научились сортировать списки постоянно и временно для отображения.
В дальнейших статьях вы узнаете, как более эффективно работать с элементами в списке, как создавать циклы каждого элемента в списке, используя всего несколько строк кода, вы сможете эффективно работать, даже если ваш список содержит тысячи или миллионы данных. Если возникли вопросы, комментарии, то оставляйте их на странице обсуждения.