Найти в Дзене

обучение Python ч.11.Массивы. Списки

Понятие списка Что такое список и зачем он нужен? Начнём с определения, список — это нечто вроде обычной переменной, которая содержит внутри себя много значений. У каждого значения, внутри переменной-списка есть адрес, например: my_list = ["Петя", "Оля", "Аня", "Игорь"]
print(my_list[2]) Если мы выведем в консоль значение списка по адресу 2, нам вернёт значение: Аня Так как нумерация значений в списке происходит с нуля, то 0 элемент – это Петя, 1 элемент – Оля, 2 элемент – Аня.
Получается, список – это множество (набор) значений, сгруппированных в рамках одной именованной области памяти (переменной). Да, определение не совсем профессиональное, но оно максимально простое, и, как мне кажется, отражает основную суть списков.
Зачем нужны списки? Как правило, списки нужны для того, чтобы хранить и управлять коллекциями связанных и однотипных данных. Например, у нас в таблице excel хранятся записи о работниках организации. Нам нужно прочитать этот файл и извлечь каждую строку с данными о ра
Оглавление

Понятие списка

Что такое список и зачем он нужен? Начнём с определения, список — это нечто вроде обычной переменной, которая содержит внутри себя много значений. У каждого значения, внутри переменной-списка есть адрес, например:

my_list = ["Петя", "Оля", "Аня", "Игорь"]
print(my_list[2])

Если мы выведем в консоль значение списка по адресу 2, нам вернёт значение:

Аня

Так как нумерация значений в списке происходит с нуля, то 0 элемент – это Петя, 1 элемент – Оля, 2 элемент – Аня.
Получается, список – это множество (набор) значений, сгруппированных в рамках одной именованной области памяти (переменной). Да, определение не совсем профессиональное, но оно максимально простое, и, как мне кажется, отражает основную суть списков.
Зачем нужны списки? Как правило, списки нужны для того, чтобы хранить и управлять коллекциями связанных и однотипных данных. Например, у нас в таблице excel хранятся записи о работниках организации. Нам нужно прочитать этот файл и извлечь каждую строку с данными о работниках в программу.
Именно для этого и нужны списки (а в целом и массивы), когда нужно разместить некоторое, заранее неизвестное количество однородных данных.

Создание списков

Для того, чтобы создать список есть 2 конструкции: list() и []:

first = list()
second = []

Логика создания такова:

имя_переменной = [механизм создания списка]

Выше представлен процесс определения списка. Но также, в момент определения списка его можно проинициализировать значениями:

first = list([1, 2, 3, 4, 5, 6])

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

Обращение к элементам списка

Для обращения к элементам списка существует следующая конструкция: имя_переменной[индекс_элемента]

first = list([1, 2, 3, 4, 5, 6])
second = [1, 2, 3, 4, 5, 6]

print(first[0])
print(first[1])
print(first[2])

Выводит:

1 2 3

Индекс элемента, это номер значения, находящегося внутри списка, «первое значение, второе, третье и т.д.». Нужно учитывать, что нумерация элементов списка начинается с 0, то есть, первое значение в списке имеет номер 0.

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

first = list([1, 2, 3, 4, 5, 6])

print(first[-1])
print(first[-2])

Выводит:

6 5

При индексе [-1] выводит последний элемент из списка, при индексе [-2] – предпоследний, и так далее.

Операции над списками

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

Функция append(элемент_списка):

first = list([1, 2, 3, 4, 5, 6])
first.append(7)

print(first)

Выводит:

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

Добавился новый элемент.

Функция insert(индекс, элемент_списка):

first = list([1, 2, 3, 4, 5, 6])
first.insert(0, 100)

print(first)

Выводит:

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

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

Получение индекса по значению элемента

Функция index(элемент):

first = list([1, 2, 3, 4, 5, 6, "Марк"])
print(first.index("Марк"))

Выводит:

6

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

Функция remove(item):

first = list([1, 2, 3, 4, 5, 6, "Марк"])
first.remove("Марк")

print(first)

Выводит:

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

Элемент «Марк» был удалён. Удаляет только первое вхождение элемента, то есть, если в списке два элемента со значением «Марк», то удалит только один из них.

Очистка всего списка.

Функция clear():

first = list([1, 2, 3, 4, 5, 6])
first.clear()

print(first)

Выводит:

[]

Перевернуть элементы списка задом-наперёд

Функция reverse():

first = list([1, 2, 3, 4, 5, 6, "Марк"])
first.reverse()

print(first)

Выводит:

['Марк', 6, 5, 4, 3, 2, 1]

Сортируем список

Функция sort():

first = [5, 7, 9, 74, 1, 99, 2]
first.sort()

print(first)

Выводит:

[1, 2, 5, 7, 9, 74, 99]

По умолчанию сортирует по увеличению, но также, в функцию sort(), можно передавать функцию для сортировки.

Удалить и вернуть значение удалённого элемента

Функция pop(индекс):

first = [5, 7, 9, 74, 1, 99, 2]
del_index = first.pop(3)
print(del_index)
print(first)

Выводит:

74 [5, 7, 9, 1, 99, 2]

Удалит четвёртый элемент (с индексом 3), выведет массив без удалённого индекса.

Проверка вхождения элемента в список

Ключевое слово in:

first = [5, 7, 9, 74, 1, 99, 2, "Mark"]
print("Mark" in first)
print("mark" in first)
print(5 in first)

Выводит:

True False True

Возвращает логическое значение, часто используется в конструкции if-else.

Слияние списков

Если у вас есть два списка, условно a_list и b_list, то их можно объединить в один при помощи символа +:

first = [5, 7, 9, 74, 1, 99, 2, "Mark"]
second = [15, 17, 19, 174, 11, 9, 12, "Alex"]
new_list = first + second
print(new_list)

Выведет:

[5, 7, 9, 74, 1, 99, 2, 'Mark', 15, 17, 19, 174, 11, 9, 12, 'Alex']

Обрезка списка. Слайсы

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

Обрезка списка имеет следующий синтаксис:

имя_списка[<от какого элемента обрезать > : <до какого элемента обрезать > : <длина шага>] или: my_list[0:15:1]

first = [5, 7, 9, 74, 1, 99, 2, "Mark"]
print(first[0:3:1])

Выведет:

[5, 7, 9]

Если вам нужно, например, получить N элементов от начала массива, то можно указать только среднее значение:

first = [5, 7, 9, 74, 1, 99, 2, "Mark"]
print(first[:3:])

Выведет то же самое, что и в прошлый раз:

[5,7,9]

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

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

first = [5, 7, 9, 74, 1, 99, 2, "Mark"]
count = len(first)
print(count)

Выведет:

8

Вложенные списки

Списки могут содержать в себе другие списки, например:

cpu = [
["AMD Threadripper 2990WX", "3.0"],
["Intel Core i7-7820X", "3.6"],
["Intel Core i3-9350KF", "4.0"],
["AMD Threadripper 2950X", "3.5"]
]

Список CPU, внутри которого вложены другие списки с данными по названию и частоте процессора. Обратиться ко внутреннему элементу списка легко, например мы хотим получить частоту работы первого процессора из списка, для этого сперва обращается к самому элементу:

cpu = [
["AMD Threadripper 2990WX", "3.0"],
["Intel Core i7-7820X", "3.6"],
["Intel Core i3-9350KF", "4.0"],
["AMD Threadripper 2950X", "3.5"]
]

print(cpu[0])

Выведет:

['AMD Threadripper 2990WX', '3.0']

А теперь, ко внутреннему элементу заданного спиcка:

cpu = [
["AMD Threadripper 2990WX", "3.0"],
["Intel Core i7-7820X", "3.6"],
["Intel Core i3-9350KF", "4.0"],
["AMD Threadripper 2950X", "3.5"]
]

print(cpu[0])
print(cpu[0][0])
print(cpu[0][1])

Мы обратились к первому элементу списка CPU, внутри которого мы обратились к элементу номер 2: cpu[0][1] и номер один: cpu[0][0]

Выведет:

['AMD Threadripper 2990WX', '3.0']
AMD Threadripper 2990WX
3.0

Динамическое добавление вложенных элементов. Можно добавить вложенный массив при помощи всё той же функции append():

cpu = [
["AMD Threadripper 2990WX", "3.0"],
["Intel Core i7-7820X", "3.6"],
["Intel Core i3-9350KF", "4.0"],
["AMD Threadripper 2950X", "3.5"]
]
cpu.append(["AMD Ryzen 9 3900X", "3.8"])
print(cpu)

Выведет:

[
['AMD Threadripper 2990WX', '3.0'],
['Intel Core i7-7820X', '3.6'],
['Intel Core i3-9350KF', '4.0'],
['AMD Threadripper 2950X', '3.5'],
['AMD Ryzen 9 3900X', '3.8']
]

Последний элемент как раз и является добавленным нами.

следующий урок