Списки
До сих пор в наших программах мы хранили данные в переменных, и обычно у каждой порции данных была своя именованная переменная. Очевидно, у этого есть ограничения: когда данных много, становится неудобно определять отдельные переменные для всего.
Список Python — это коллекция значений, к которой обращаются через одно имя переменной. Содержимое списка записывается внутри квадратных скобок. Значения, содержащиеся в списке, называются элементами (items, иногда elements).
Следующая команда создает новый пустой список
my_list = []а эта команда создает список с пятью элементами:
my_list = [7, 2, 2, 5, 2]Обращение к элементам списка
Элементы списка индексируются точно так же, как символы в строке. Индексация начинается с нуля, а последний индекс равен длине списка минус 1:
К одному элементу списка можно обратиться так же, как к одному символу строки, с помощью квадратных скобок:
my_list = [7, 2, 2, 5, 2]
print(my_list[0])
print(my_list[1])
print(my_list[3])
print("The sum of the first two items:", my_list[0] + my_list[1])7 2 5 The sum of the first two items: 9
Можно также вывести все содержимое списка:
my_list = [7, 2, 2, 5, 2]
print(my_list)[7, 2, 2, 5, 2]
В отличие от строк, списки изменяемы, то есть их содержимое может меняться. Можно присвоить новое значение элементу внутри списка так же, как можно присвоить новое значение переменной:
my_list = [7, 2, 2, 5, 2]
print(my_list)
my_list[1] = 3
print(my_list)[7, 2, 2, 5, 2] [7, 3, 2, 5, 2]
Функция len дает количество элементов в списке:
my_list = [7, 2, 2, 5, 2]
print(len(my_list))5
Добавление элементов в список
Метод append добавляет элементы в конец списка. Он работает так:
numbers = []
numbers.append(5)
numbers.append(10)
numbers.append(3)
print(numbers)[5, 10, 3]
В следующем примере используются два отдельных списка:
numbers = []
shoe_sizes = []
numbers.append(5)
numbers.append(10)
numbers.append(3)
shoe_sizes.append(37)
shoe_sizes.append(44)
shoe_sizes.append(40)
shoe_sizes.append(28)
print("Numbers:")
print(numbers)
print("Shoe sizes:")
print(shoe_sizes)Элемент добавляется в тот список, для которого вызывается метод:
Numbers: [5, 10, 3] Shoe sizes: [37, 44, 40, 28]
Добавление в определенное место
Если вы хотите указать место в списке, куда должен быть добавлен элемент, можно использовать метод insert. Метод добавляет элемент по указанному индексу. Все элементы, которые уже находятся в списке и имеют индекс, равный указанному или больше него, сдвигаются на один индекс дальше, "вправо":
Итак, например, эта программа
numbers = [1, 2, 3, 4, 5, 6]
numbers.insert(0, 10)
print(numbers)
numbers.insert(2, 20)
print(numbers)выводит:
[10, 1, 2, 3, 4, 5, 6] [10, 1, 20, 2, 3, 4, 5, 6]
Удаление элементов из списка
Есть два разных подхода к удалению элемента из списка:
- Если известен индекс элемента, можно использовать метод
pop. - Если известно содержимое элемента, можно использовать метод
remove.
Итак, метод pop принимает индекс элемента, который нужно удалить, как аргумент. Следующая программа удаляет из списка элементы с индексами 2 и 3. Обратите внимание, как индексы оставшихся элементов меняются после удаления одного элемента.
my_list = [1, 2, 3, 4, 5, 6]
my_list.pop(2)
print(my_list)
my_list.pop(3)
print(my_list)[1, 2, 4, 5, 6] [1, 2, 4, 6]
Полезно помнить, что метод pop также возвращает удаленный элемент:
my_list = [4, 2, 7, 2, 5]
number = my_list.pop(2)
print(number)
print(my_list)7 [4, 2, 2, 5]
Метод remove, с другой стороны, принимает значение удаляемого элемента как аргумент. Например, эта программа
my_list = [1, 2, 3, 4, 5, 6]
my_list.remove(2)
print(my_list)
my_list.remove(5)
print(my_list)выводит:
[1, 3, 4, 5, 6] [1, 3, 4, 6]
Метод удаляет первое появление значения в списке, примерно так же, как строковая функция find возвращает первое появление подстроки:
my_list = [1, 2, 1, 2]
my_list.remove(1)
print(my_list)
my_list.remove(1)
print(my_list)[2, 1, 2] [2, 2]
Если указанного элемента нет в списке, функция remove вызывает ошибку. Как и со строками, мы можем проверить наличие элемента с помощью оператора in:
my_list = [1, 3, 4]
if 1 in my_list:
print("The list contains item 1")
if 2 in my_list:
print("The list contains item 2")The list contains item 1
Сортировка списков
Элементы списка можно отсортировать от меньшего к большему с помощью метода sort.
my_list = [2,5,1,2,4]
my_list.sort()
print(my_list)[1, 2, 2, 4, 5]
Обратите внимание, что метод изменяет сам список. Иногда мы не хотим менять исходный список, поэтому вместо этого используем функцию sorted. Она возвращает отсортированный список:
my_list = [2,5,1,2,4]
print(sorted(my_list)))[1, 2, 2, 4, 5]
Запомните разницу между ними: sort меняет порядок исходного списка на месте, тогда как sorted создает новую упорядоченную копию списка. С sorted мы можем сохранить исходный порядок списка:
original = [2, 5, 1, 2, 4]
in_order = sorted(original)
print(original)
print(in_order)[2, 5, 1, 2, 4] [1, 2, 2, 4, 5]
Максимум, минимум и сумма
Функции max и min, сокращения от maximum и minimum, возвращают соответственно наибольший и наименьший элемент списка. Функция sum возвращает сумму всех элементов списка.
my_list = [5, 2, 3, 1, 4]
greatest = max(my_list)
smallest = min(my_list)
list_sum = sum(my_list)
print("Smallest:", smallest)
print("Greatest:", greatest)
print("Sum:", list_sum)Smallest: 1 Greatest: 5 Sum: 15
Методы и функции
В Python есть два разных способа обрабатывать списки, и это может запутать. В основном вы будете использовать методы списков, такие как append и sort. Они используются с оператором точки . на переменной списка:
my_list = []
# method calls
my_list.append(3)
my_list.append(1)
my_list.append(7)
my_list.append(2)
# another method call
my_list.sort()Некоторые функции охотно принимают список как аргумент. Выше мы видели, что функции max, min, len и sorted именно так и работают:
my_list = [3, 2, 7, 1]
# function calls take the list as an argument
greatest = max(my_list)
smallest = min(my_list)
length = len(my_list)
print("Smallest:", smallest)
print("Greatest:", greatest)
print("Length of the list:", length)
# another function call
# the list itself is an argument, the function returns a sorted copy
in_order = sorted(my_list)
print(in_order)Smallest: 1 Greatest: 7 Length of the list: 4 [1, 2, 3, 7]
Список как аргумент или возвращаемое значение
Так же как встроенные функции выше, наши собственные функции тоже могут принимать список как аргумент и создавать список как возвращаемое значение. Следующая функция вычисляет центральное значение в упорядоченном списке, также называемое медианным значением:
def median(my_list: list):
ordered = sorted(my_list)
list_centre = len(ordered) // 2
return ordered[list_centre]Функция создает упорядоченную версию списка, переданного как аргумент, и возвращает элемент в самой середине. Обратите внимание на оператор целочисленного деления //, использованный здесь. Индекс списка всегда должен быть целым числом.
Функция работает так:
shoe_sizes = [45, 44, 36, 39, 40]
print("The median of the shoe sizes is", median(shoe_sizes))
ages = [1, 56, 34, 22, 5, 77, 5]
print("The median of the ages is", median(ages))The median of the shoe sizes is 40 The median of the ages is 22
Функция также может возвращать список. Следующая функция просит пользователя вводить целые числа и возвращает ввод как список:
def input_numbers():
numbers = []
while True:
user_input = input("Please type in an integer, leave empty to exit: ")
if len(user_input) == 0:
break
numbers.append(int(user_input))
return numbersФункция использует вспомогательную переменную numbers, которая является списком. Все числа, введенные пользователем, добавляются в список. Когда из цикла выходят, функция возвращает список с помощью инструкции return numbers.
Вызов функции вот так
numbers = input_numbers()
print("The greatest number is", max(numbers))
print("The median of the numbers is", median(numbers))мог бы вывести, например:
Please type in an integer, leave empty to exit: 5 Please type in an integer, leave empty to exit: -22 Please type in an integer, leave empty to exit: 4 Please type in an integer, leave empty to exit: 35 Please type in an integer, leave empty to exit: 1 Please type in an integer, leave empty to exit: The greatest number is 35 The median of the numbers is 4
Этот небольшой пример демонстрирует одно из самых важных применений функций: они помогают разделить код на меньшие, легко понятные и логичные целые части.
Конечно, того же поведения можно было бы добиться и без написания собственных функций:
numbers = []
while True:
user_input = input("Please type in an integer, leave empty to exit: ")
if len(user_input) == 0:
break
numbers.append(int(user_input))
ordered = sorted(numbers)
list_centre = len(ordered) // 2
median = ordered[list_centre]
print("The greatest number is", max(numbers))
print("The median of the numbers is", median)В этой версии следить за логикой программы сложнее, потому что уже не ясно, какие команды относятся к какой функциональности. Код выполняет те же задачи — читает ввод, вычисляет медианное значение и так далее, — но его структура менее ясна.
Организация кода в отдельные функции улучшит читаемость вашей программы, а также упростит работу с логическими целыми частями. Это, в свою очередь, поможет убедиться, что программа работает как задумано, потому что каждую функцию можно тестировать отдельно.
Еще одно важное применение функций — делать код повторно используемым. Если вам нужно выполнить какую-то функциональность несколько раз в программе, хорошая идея — создать собственную функцию и дать ей подходящее имя:
print("Shoe sizes:")
shoe_sizes = input_numbers()
print("Weights:")
weights = input_numbers()
print("Heights:")
heights = input_numbers()Есть еще много способов использовать списки в Python. Документация Python — хорошее место, чтобы начать, если вы хотите узнать больше.
Текущие баллы можно посмотреть в синем индикаторе в правом нижнем углу страницы.