В python есть мощная и удобная встроенная структура данных, которая позволяет группировать данные разных типов в упорядоченные коллекции и имеет большой набор операций. Это списки. Они широко используются для решения практически любых задач. Именно это меня и сподвигло сделать расширенный конспект по всем самым востребованным операциям.
Итак, немногим ранее я уже размещал Конспект по типам данных в Python, однако информации в нем для меня стало недостаточно, я регулярно рою интернете справки по операциям со списками. Ну значит настало время исправить ситуацию, закрепить знания и сконцентрировать их в одном месте.
Что такое списки в Python
Список в Python – это упорядоченная последовательность элементов (items), которые могут иметь разные типы данных. Списки записываются в квадратных скобках и разделяются запятыми. Например:
colors = ["red", "green", "blue"]
numbers = [1, 5, 2, 8, 4]
В списках мы можем хранить элементы любых типов данных – строки, числа, объекты и даже другие списки. Это отличает их от многих других структур данных, которые зачастую бывают типизированы.
Каждый элемент в списке имеет соответствующий индекс, начиная с 0 для первого элемента. Таким образом, мы можем обращаться к отдельным элементам по их индексам:
first_color = colors[0] # "red"
Списки в Python предоставляют богатый набор операций для создания и манипулирования данными:
- Добавление элементов (append, insert, extend)
- Удаление элементов (pop, remove, clear)
- Срез списка (slice)
- Итерация по списку (for)
- Поиск элементов (in)
- Сортировка списка (sort)
Самые востребованные методы списков
append() -
Добавляет элемент в конец списка.
my_list = [1, 2, 3]
my_list.append(4) # теперь my_list содержит [1, 2, 3, 4]
insert()
: Вставляет элемент на указанную позицию в списке.
my_list = [1, 2, 3]
my_list.insert(1, 5) # теперь my_list содержит [1, 5, 2, 3]
remove()
: Удаляет первое вхождение указанного элемента из списка.
my_list = [1, 2, 3, 2]
my_list.remove(2) # теперь my_list содержит [1, 3, 2]
pop()
: Удаляет и возвращает элемент по указанному индексу (по умолчанию – последний элемент).
my_list = [1, 2, 3]
last_element = my_list.pop() # last_element содержит 3, а my_list теперь [1, 2]
sort()
: Сортирует элементы списка по возрастанию (по умолчанию) или по указанному ключу.
my_list = [3, 1, 2]
my_list.sort() # теперь my_list содержит [1, 2, 3]
reverse()
: Изменяет порядок элементов списка на обратный.
my_list = [1, 2, 3]
my_list.reverse() # теперь my_list содержит [3, 2, 1]
reversed() – возвращает обратный итератор для любой последовательности
my_list = [1, 2, 3]
reversed_list = list(reversed(my_list)) # reversed_list содержит [3, 2, 1]
Метод reverse() и функция reversed() в Python оба позволяют изменять порядок элементов в последовательностях, но они имеют разные особенности и применения. Вот основные отличия между ними:
– Тип последовательности: reverse() является методом списка и применяется только к изменяемым последовательностям, таким как списки. reversed() является универсальной функцией и может быть применена к любому типу последовательности, включая строки, списки, кортежи и диапазоны (ranges).
– Изменение последовательности: reverse() изменяет существующий список «на месте», то есть порядок элементов в исходном списке меняется. В то время как reversed() создает новый обратный итератор, не изменяя исходную последовательность.
– Возвращаемое значение: reverse() не возвращает значение, так как изменяет исходный список. reversed() возвращает обратный итератор, который можно сконвертировать в другие типы последовательностей, например, в список, кортеж или строку.
index()
: Возвращает индекс первого вхождения указанного элемента в списке.
my_list = [10, 20, 30, 20]
index = my_list.index(20) # index содержит 1
count()
: Возвращает количество вхождений указанного элемента в списке.
my_list = [1, 2, 2, 3, 2]
count = my_list.count(2) # count содержит 3
extend()
: Расширяет список, добавляя в него элементы другого списка.
list1 = [1, 2]
list2 = [3, 4]
list1.extend(list2) # list1 теперь содержит [1, 2, 3, 4]
copy()
: Создает копию списка.
original_list = [1, 2, 3]
copied_list = original_list.copy() # copied_list содержит [1, 2, 3]
clear()
: Удаляет все элементы из списка.
my_list = [1, 2, 3]
my_list.clear() # my_list теперь пустой []
len()
: Возвращает длину (количество элементов) списка.
my_list = [1, 2, 3, 4, 5]
length = len(my_list) # length содержит 5
max()
: Возвращает максимальный элемент в списке.
my_list = [10, 30, 20]
max_element = max(my_list) # max_element содержит 30
min()
: Возвращает минимальный элемент в списке.
my_list = [10, 30, 20]
min_element = min(my_list) # min_element содержит 10
any()
: Возвращает True, если хотя бы один элемент списка истинен (не равен нулю, None, False или пустому контейнеру).
my_list = [0, 1, 2]
result = any(my_list) # result содержит True
all()
: Возвращает True, если все элементы списка истинны (не равны нулю, None, False или пустому контейнеру).
my_list = [1, 2, 3]
result = all(my_list) # result содержит True
sorted()
: Возвращает новый список, содержащий отсортированные элементы исходного списка.
my_list = [3, 1, 2]
sorted_list = sorted(my_list) # sorted_list содержит [1, 2, 3], my_list остается без изменений
slice()
: Возвращает срез списка, начиная с указанного начального индекса и заканчивая указанным конечным индексом.
slice(start, stop, step)
start - необязательный параметр, целое число, указывающее, с какой позиции начать срезание. По умолчанию равен 0. stop - обязательный параметр, целое число, указывающее, на какой позиции закончить срезание. Не включается в срез. step - необязательный параметр, целое число, указывающее, какой шаг использовать для срезания. По умолчанию равен 1.
b = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
y = slice(0, 10, 3) # создаем срез с параметрами start=0, stop=10, step=3
print(b[y]) # применяем срез к списку
[1, 4, 7, 10]
count()
: Возвращает количество вхождений указанного элемента в списке.
my_list = [1, 2, 2, 3, 2]
count = my_list.count(2) # count содержит 3
join()
: Собирает элементы списка в строку, разделенную указанным разделителем.
my_list = ['Hello', 'world', '!']
joined_string = ' '.join(my_list) # joined_string содержит 'Hello world !'
map()
: Применяет указанную функцию к каждому элементу списка.
my_list = [1, 2, 3]
squared_list = list(map(lambda x: x**2, my_list)) # squared_list содержит [1, 4, 9]
filter()
: Возвращает новый список, содержащий только элементы для которых указанная функция возвращает True.
my_list = [1, 2, 3, 4, 5]
filtered_list = list(filter(lambda x: x % 2 == 0, my_list)) # filtered_list содержит [2, 4]
Этот код использует функцию filter() в Python, чтобы отфильтровать список my_list и оставить только четные числа. Функция filter() принимает два аргумента: функцию-условие и итерируемый объект. В этом случае функцией-условием является lambda-функция, которая проверяет, делится ли каждый элемент списка на 2 без остатка. Итерируемым объектом является список my_list. Функция filter() возвращает новый итерируемый объект, содержащий только те элементы, для которых функция-условие возвращает True. Чтобы преобразовать этот итерируемый объект в список, используется функция list(). Таким образом, filtered_list содержит [2, 4], так как это единственные четные числа из my_list.
reduce()
: Применяет указанную функцию к элементам списка поочередно, сводя список к одному значению.
from functools import reduce
my_list = [1, 2, 3, 4]
sum = reduce(lambda x, y: x + y, my_list) # sum содержит 10
Этот код использует функцию reduce() из модуля functools в Python, чтобы суммировать все элементы списка my_list. Функция reduce() принимает два аргумента: функцию для двух аргументов и итерируемый объект. В этом случае функцией является lambda-функция, которая складывает два числа. Итерируемым объектом является список my_list. Функция reduce() применяет функцию к первым двум элементам списка, затем к результату и следующему элементу, и так далее, пока не останется одно значение. Это значение возвращается как результат функции reduce(). В данном примере результатом будет 10, так как 1 + 2 + 3 + 4 = 10.
zip()
: Создает итератор, который объединяет элементы нескольких списков в кортежи.
list1 = [1, 2, 3]
list2 = ['a', 'b', 'c']
zipped_list = list(zip(list1, list2)) # zipped_list содержит [(1, 'a'), (2, 'b'), (3, 'c')]