Python list

Основы

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

Как создать список?

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

список = []
print(type(список))
# Вывод:
<class 'list'>


Второй способ – использовать встроенную функцию list().

список = list()
print(type(список))
# Вывод:
<class 'list'>


Так же, как и в случае остальных типов данных, в Питоне можно при объявлении переменной сразу наполнить её значениями. В качестве таких значений могут выступать данные любого типа.

список_1 = [1, 'a', ['qwerty']]
список_2 = list(({'a':1}, {1, 2, 3}, (1, 2, 3)))
print(type(список_1), type(список_2))
print('список_1', список_1, 'список_2', список_2, sep='\n')
# Вывод:
<class 'list'> <class 'list'>
список_1
[1, 'a', ['qwerty']]
список_2
[{'a': 1}, {1, 2, 3}, (1, 2, 3)]


Как видите, список_1 хранит значения типов int, string и list, а список_2 – dict, set и tuple.

Доступ к элементам списка

Ещё одним удобством является то, что данная структура запоминает порядок, в котором хранит значения. Это даёт возможность обращаться к значениям по индексу – порядковому номеру значения (у программистов принято что нумерация начинается с нуля).

список_1 = [1, 'a', ['qwerty']]
print('список_1[0]', список_1[0])
print('список_1[1]', список_1[1])
print('список_1[2]', список_1[2])
# Вывод:
список_1[0] 1
список_1[1] a
список_1[2] ['qwerty']


Можно также использовать отрицательный индекс, тогда отсчёт будет производится от последнего элемента (последний элемент последовательности при такой нумерации имеет индекс «-1»).

список_1 = [1, 'a', ['qwerty']]
print('список_1[-1]', список_1[-1])
print('список_1[-2]', список_1[-2])
print('список_1[-3]', список_1[-3])
# Вывод:
список_1[-1] ['qwerty']
список_1[-2] a
список_1[-3] 1


Это бывает полезно, особенно, если Вам неизвестна длина списка.
Ко всем элементам можно обращаться как по положительному, так и по отрицательному индексу.

список_1 = [1, 'a', ['qwerty']]
print('список_1[-1]', список_1[-1])
print('список_1[2]', список_1[2])
# Вывод:
список_1[-1] ['qwerty']
список_1[2] ['qwerty']

Срезы (slice) списка

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

список_1 = list(range(11))
print('список_1[0:5:-1]', список_1[0:5:-1]) # Элементы с первого по пятый в обратном порядке
print('список_1[2:]',
список_1[2:]) # Все элементы, начиная с третьего. Аргументы можно пропускать, но двоеточия указать придётся
print('список_1[::2]', список_1[::2]) # Все чётные элементы
print('список_1[:]', список_1[:]) # Такая запись вернёт все элементы
# Но это копия, а не тот же список
список_2 = список_1
список_3 = список_1[:]
print('Равенство списков:')
print('список_2 == список_1', список_2 == список_1)
print('список_3 == список_1', список_3 == список_1)
print('Идентичность списков:')
print('список_2 is список_1', список_2 is список_1)
print('список_3 is список_1', список_3 is список_1)
# Вывод:
список_1[0:5:-1] []
список_1[2:] [2, 3, 4, 5, 6, 7, 8, 9, 10]
список_1[::2] [0, 2, 4, 6, 8, 10]
список_1[:] [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
Равенство списков:
список_2 == список_1 True
список_3 == список_1 True
Идентичность списков:
список_2 is список_1 True
список_3 is список_1 False

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

После создания списка его элементы можно менять.

список_1 = list(range(11))
print('список_1', список_1)
список_1 = список_1[::-1]
print('список_1 после изменения:', список_1)
# Вывод:
список_1 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
список_1 после изменения: [10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0]

Методы и функции списков python

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

Метод Index

Метод index позволяет узнать индекс элемента с определённым значением.

список_1 = ['Петя', 'Вася', 'Ваня']
print('Номер элемента со значением "Ваня":', список_1.index('Ваня'))
# Вывод:
Номер элемента со значением "Ваня": 2


Если таких элементов несколько, то метод вернёт индекс первого встреченного.

список_1 = ['Петя', 'Ваня', 'Вася', 'Ваня']
print('Номер элемента со значением "Ваня":', список_1.index('Ваня'))
# Вывод:
Номер элемента со значением "Ваня": 1


Но Вы можете указать вторым аргументом с какого индекса начинать поиск.

список_1 = ['Петя', 'Ваня', 'Вася', 'Ваня']
print('Номер элемента со значением "Ваня":', список_1.index('Ваня', 2))
# Вывод:
Номер элемента со значением "Ваня": 3

Метод Count

Этот метод возвращает количество вхождений определённого элемента.

список_1 = ['Петя', 'Ваня', 'Вася', 'Ваня']
print('Количество элементов со значением "Ваня":', список_1.count('Ваня'))
# Вывод:
Количество элементов со значением "Ваня": 2

Метод Sort

Метод sort сортирует по возрастанию и меняет исходный список. Можно указать обратный порядок сортировки передав необязательный именованный аргумент reverse=true.

import random

список_1 = [random.randint(0, 10) for i in range(10)]
print('Значения в случайном порядке:', список_1)
список_1.sort()
print('Упорядоченные значения:', список_1)
список_1.sort(reverse=True)
print('Значения по убыванию', список_1)
# Вывод:
Значения в случайном порядке: [1, 8, 7, 0, 9, 0, 4, 6, 2, 2]
Упорядоченные значения: [0, 0, 1, 2, 2, 4, 6, 7, 8, 9]
Значения по убыванию [9, 8, 7, 6, 4, 2, 2, 1, 0, 0]


Сортировать, естественно, можно и строки.

список_1 = ['Lorem', 'ipsum', 'dolor', 'sit', 'amet', 'consectetur', 'adipisicing', 'elit']
список_1.sort()
print('Упорядоченные значения:', список_1)
# Вывод:
Упорядоченные значения: ['Lorem', 'adipisicing', 'amet', 'consectetur', 'dolor', 'elit', 'ipsum', 'sit']

Метод Append

Метод append добавляет элемент в конец списка.

список_1 = ['Lorem', 'ipsum', 'dolor', 'sit', 'amet', 'consectetur', 'adipisicing', 'elit']
список_1.append('Ваня')
print('список_1:', список_1)
# Вывод:
список_1: ['Lorem', 'ipsum', 'dolor', 'sit', 'amet', 'consectetur', 'adipisicing', 'elit', 'Ваня']

Метод Remove

Метод remove удаляет первое вхождение значения в списке.

список_1 = ['Петя', 'Вася', 'Ваня']
список_1.remove('Ваня')
print('Номер элемента со значением "Ваня":', список_1.index('Ваня'))
# Вывод:
Traceback (most recent call last):
File "C:\Users\ivand\AppData\Roaming\JetBrains\PyCharm2021.2\scratches\scratch.py", line 3, in
print('Номер элемента со значением "Ваня":', список_1.index('Ваня'))
ValueError: 'Ваня' is not in list

Метод Pop

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

список_1 = ['Петя', 'Вася', 'Ваня']
print('Удаляем элемент:', список_1.pop(0))
print('Удаляем элемент:', список_1.pop())
print('Вот что осталось:', список_1)
# Вывод:
Удаляем элемент: Петя
Удаляем элемент: Ваня
Вот что осталось: ['Вася']

Метод Extend

Метод extend расширяет список, добавляя элементы. Преимущество над append в том, что вы можете добавлять списки, автоматически их распаковывая.

список_1 = ['Петя', 'Вася', 'Ваня']
список_1.append(['Эдуард', 'Эразм'])
print('список_1:', список_1)
список_2 = ['Петя', 'Вася', 'Ваня']
список_2.extend(['Эдуард', 'Эразм'])
print('список_2:', список_2)
# Вывод:
список_1: ['Петя', 'Вася', 'Ваня', ['Эдуард', 'Эразм']]
список_2: ['Петя', 'Вася', 'Ваня', 'Эдуард', 'Эразм']


То же самое можно было бы сделать, используя +.

список_1 = ['Петя', 'Вася', 'Ваня']
список_1 += ['Эдуард', 'Эразм']
print('список_1:', список_1)
# Вывод:
список_1: ['Петя', 'Вася', 'Ваня', 'Эдуард', 'Эразм']

Метод Insert

Метод insert вставляет элемент перед указанным индексом.

список_1 = ['Петя', 'Вася', 'Ваня']
список_1.insert(1, 'Сид')
print('список_1:', список_1)
# Вывод:
список_1: ['Петя', 'Сид', 'Вася', 'Ваня']

Простые операции над списками

Метод Описание
x in s True если элемент x находится в списке s
x not in s True если элемент x не находится в списке s
s1 + s2 Объединение списков s1 и s2
s * n , n * s Копирует список s n раз
len(s) Длина списка s, т.e. количество элементов в s
min(s) Наименьший элемент списка s
max(s) Наибольший элемент списка s
sum(s) Сумма чисел списка s
for i in list() Перебирает элементы слева направо в цикле for

Примеры использование функций со списками:

список_1 = ['Петя', 15, 'Вася', 1==1, 'Ваня', [('a', 1), {3, 4}]]
print('15 in список_1:', 15 in список_1)
print('True not in список_1:', True not in список_1)
print('Длина списка:', len(список_1))
print('Длина вложенного списка:', len(список_1[-1]))
print('Длина вложенного вложенного ;) списка:', len(список_1[-1][1]))
print('Сумма:', sum(список_1[5][-1]))
print('Минимальное значение:', min(список_1[5][-1]))
print('Генерируем новый список при помощи спискового включения:')
список_2 = [(i*10//2)**2 for i in range(10)]
print(список_2)
print('Разворачиваем список:')
список_2.reverse()
print(список_2)
# Вывод:
15 in список_1: True
True not in список_1: False
Длина списка: 6
Длина вложенного списка: 2
Длина вложенного вложенного ;) списка: 2
Сумма: 7
Минимальное значение: 3
Генерируем новый список при помощи спискового включения:
[0, 25, 100, 225, 400, 625, 900, 1225, 1600, 2025]
Разворачиваем список:
[2025, 1600, 1225, 900, 625, 400, 225, 100, 25, 0]

Операторы + и * для списков

+ объединяет два списка.

список_1 = ['Петя', 15, 'Вася', 1==1]
список_1 += ['Ваня', [('a', 1), {3, 4}]]
print(список_1)
# Вывод:
['Петя', 15, 'Вася', True, 'Ваня', [('a', 1), {3, 4}]]


* копирует элементы в списке.

список_1 = ['Петя', 15, 'Вася', 1==1]
список_1 *= 3
print(список_1)
# Вывод:
['Петя', 15, 'Вася', True, 'Петя', 15, 'Вася', True, 'Петя', 15, 'Вася', True]

Оператор in и not in

Оператор in проверяет находится ли элемент в списке. При успешном результате он возвращает True, в случае неудачи, возвращает False .

список_1 = ['Петя', 15, 'Вася', 1==1]
print(16 in список_1)
# Вывод:
False


Аналогично not in возвращает противоположный от оператора in результат.

список_1 = ['Петя', 15, 'Вася', 1==1]
print('A' not in список_1)
# Вывод:
True

Итерация по списку с использованием цикла for

Список — последовательность. Ниже способ, которые вы можете использовать для цикла, чтобы перебрать все элементы списка.

list1 = [1,2,3,4,5]
for i in list1:
    print(i, end=" ")
# Вывод:
Петя
15
Вася
True

Преобразование списка в строку

Во-первых, если это список строк, вы можете просто использовать join() следующим образом.

список_1 = ['Петя', 'Вася', 'Эльвира']
строка = ', '.join(список_1)
print(строка, type(строка))
# Вывод:
Петя, Вася, Эльвира <class 'str'>


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

список_1 = ['Петя', 15, 'Вася', 1==1]
строка = ', '.join([str(i) for i in список_1])
print(строка, type(строка))
# Вывод:
Петя, 15, Вася, True <class 'str'>

Оцените статью
О Python на русском языке
Добавить комментарий

Adblock
detector