Подробное практическое руководство с примерами.
Список - это встроенная структура данных в Python. Он представлен в виде набора точек данных в квадратных скобках. Списки могут использоваться для хранения любого типа данных или смеси различных типов данных.
Списки изменяемы, что является одной из причин их широкого использования. Однако в некоторых случаях изменчивость требует особой осторожности.
В этом посте мы рассмотрим 11 очень важных операций, которые охватывают почти все, что вам нужно знать о списках Python.
1. Три способа удаления элементов из списка
Первый способ - это функция del. Мы просто пропустили индекс удаляемого элемента.
a = [1, 2, 'x', 4, 5] del(a[0]) print(f'a is {a}') a is [2, 'x', 4, 5]
Мы можем использовать функцию удаления, которая ищет значение, которое нужно удалить.
a = [1, 2, 'x', 4, 5] a.remove('x') print(f'a is {a}') a is [1, 2, 4, 5]
Третий способ - это функция pop, которая по умолчанию удаляет последний элемент списка. В отличие от двух других функций, pop возвращает удаленное значение. Таким образом, у нас есть возможность присвоить его другой переменной.
a = [1, 2, 'x', 4, 5] b = a.pop() print(f'a is {a}') print(f'b is {b}') a is [1, 2, 'x', 4] b is 5
Изменить: всплывающее окно обычно используется для вывода (или удаления) последнего элемента списка. Однако его также можно использовать для удаления любого элемента, указав индекс. Спасибо Китешу за хедз-ап в комментариях.
a.pop(-1) #removes the last element a.pop(2) #removes the third element
Примечание. Есть два способа проиндексировать список:
- От начала до конца: 0, 1, 2, 3
- От конца до начала: -1, -2, -3
a = ['x','y','z','t','u','v'] print(a[-1]) v print(a[2]) z
2. Добавить vs расширить vs вставить
Добавить используется для добавления элемента в список.
a = [1, 2] a.append(3) a [1, 2, 3]
Что бы вы ни добавили в список, оно станет его элементом.
a = [1, 2] b = [3, 4, 5] a.append(b) a [1, 2, [3, 4, 5]]
Список b стал третьим пунктом списка a. Если вы хотите создать список, который представляет собой комбинацию элементов в a и b ([1, 2, 3, 4, 5]), вам необходимо использовать функцию расширения или оператор «+».
a = [1, 2] b = [3, 4, 5] a.extend(b) a [1, 2, 3, 4, 5] # a + b will give the same result
Функция вставки также используется для добавления элемента в список. Однако он позволяет указать индекс нового элемента. Например, мы можем добавить новый элемент в начало списка (индекс = 0).
a = [1, 2, 3, 4, 5] a.insert(0, 'a') a ['a', 1, 2, 3, 4, 5]
Первый параметр - это индекс, а второй - значение.
3. Копирование списка с помощью знака «=».
Мы можем скопировать список и создать новую переменную.
a = [1, 2, 3] b = a
Однако новая переменная «b» - это просто указатель на значения «a». Таким образом, любое изменение a также изменяет b. Давайте подтвердим, добавив значение к.
a.append(4) print(f'a is {a}') print(f'b is {b}') a is [1, 2, 3, 4] b is [1, 2, 3, 4]
4. Копирование списка с помощью индексов.
Мы можем скопировать список, выбрав все его индексы.
a = [1, 2, 3] b = a[:]
Новый список b содержит те же значения, что и a, но в другом месте памяти. Если мы внесем изменения в a, это не повлияет на b.
a.append(4) print(f'a is {a}') print(f'b is {b}') a is [1, 2, 3, 4] b is [1, 2, 3]
Копирование списка с помощью функции копирования работает так же, как копирование с индексами.
a = [1, 2, 3] b = a.copy() a.append(4) print(f'a is {a}') print(f'b is {b}') a is [1, 2, 3, 4] b is [1, 2, 3]
5. Сортировка списка с помощью sort () и sorted ().
Для сортировки списка можно использовать функции sort и sorted:
- sort (): сортирует список, но ничего не возвращает.
- sorted (): возвращает отсортированную копию списка, но не сортирует исходный список.
a = [2, 0, 4, 3] b = a.sort() print(f'a is {a}') print(f'b is {b}') a is [0, 2, 3, 4] b is None
Давайте проделаем тот же пример с функцией сортировки.
a = [2, 0, 4, 3] b = sorted(a) print(f'a is {a}') print(f'b is {b}') a is [2, 0, 4, 3] b is [0, 2, 3, 4]
6. Создание вложенных списков с копированием
Создавая вложенный список списков путем копирования, мы должны быть осторожны с модификациями. Любое изменение в исходном списке приведет к изменению скопированного.
a = [1, 2] b = [4, 5, 6] c = [a, b] a.append(3) b.pop()
Список c состоит из списков a и b. Мы обновили списки a и b, добавив и удалив элемент. В результате список c также был обновлен.
print(f'a is {a}') print(f'b is {b}') print(f'c is {c}') a is [1, 2, 3] b is [4, 5] c is [[1, 2, 3], [4, 5]]
7. Изменение списка во время итерации.
Списки - это итерируемые объекты, поэтому их обычно используют в циклах. Итерация основана на индексе, поэтому нам нужно быть осторожными, если мы обновляем списки при итерации.
Рассмотрим следующий код. Он удаляет элементы из списка a, если элемент также находится в списке b.
a = ['x', 'y', 'z', 't'] b = ['x', 'y', 'u', 'v'] for item in a: if item in b: a.remove(item)
Когда код выполняется, мы ожидаем, что список a станет [‘z’, ‘t’]. Посмотрим, что произошло на самом деле.
print(f'a is {a}') print(f'b is {b}') a is ['y', 'z', 't'] b is ['x', 'y', 'u', 'v']
Хотя «y» существует в списке b, он все еще находится в списке a. Причина в том, что когда первый элемент («x») удаляется из списка a, индекс также обновляется. Следующий элемент a [1] становится «z», но должен быть «y». Таким образом, цикл for сравнивает каждый второй элемент.
Вот шаг, на котором первый элемент удаляется из списка a:
Вот следующий элемент, который сравнивается. Как видите, это буква «z», поэтому «y» никогда не сравнивается.
8. Составьте список понятий.
Понимание списков - это в основном создание списков на основе существующих итераций. Он позволяет быстрее выполнять то, что можно сделать с помощью циклов for. Синтаксис понимания списка также проще и привлекательнее, чем у циклов for.
Приведем простой пример.
a = [1, 2, 4, 5, 7, 9, 11] b = [x for x in a if x % 2 == 0] print(b) [2,4]
Список b содержит только четные элементы списка a. Эту же операцию можно выполнить с помощью цикла for, как показано ниже:
for item in a: if item % 2 == 0: b.append(item)
Как видите, составление списка проще.
Примечание. Понимание списка загружает весь выходной список в память, что делает его быстрее, чем цикл for. При работе с небольшими или средними списками желательно использовать составные части списков. Однако, когда мы работаем с большими списками (например, с 1 миллиардом элементов), следует избегать понимания списка. Это может привести к сбою вашего компьютера из-за чрезмерных требований к памяти.
9. Составьте список, изменяющий элементы.
Мы также можем выполнять операции с каждым элементом в понимании списка. Рассмотрим следующий список а:
a = ['john', 'emily', 'julia']
Мы хотим создать список b, состоящий из имен, начинающихся с буквы «j». Мы также хотим использовать имена с заглавной буквы.
b = [item.capitalize() for item in a if item.startswith('j')] print(b) ['John', 'Julia']
10. Понимание списков во вложенных списках
Мы можем перебирать вложенные списки в понимании списка. Рассмотрим следующий список списков:
vals = [[1,2,3],[4,5,2],[3,2,6]]
Мы хотим удалить каждый элемент из вложенных списков, чтобы получить желаемый результат:
vals_exp = [1,2,3,4,5,2,3,2,6]
Вот список для выполнения этой задачи:
vals_exp = [y for x in vals for y in x] vals_exp [1,2,3,4,5,2,3,2,6]
Если синтаксис вам не понятен, попробуйте сначала сделать это с помощью циклов for. Затем вы можете переместить блоки циклов for в понимание списка. Следующий рисунок поможет вам понять, что я имею в виду:
11. Лен, перевернуть и считать.
Это очень простые, но весьма полезные операции.
- len: возвращает длину (количество элементов) списка
- reverse: меняет порядок элементов в списке на обратный
- count: подсчитывает количество вхождений определенного элемента в списке
Бонус
В примере 10 есть более простой способ выполнить задачу. Он включает в себя функцию разнесения Панд.
Нам нужно преобразовать вложенный список (vals) в серию Pandas, а затем применить функцию разнесения. Чтобы преобразовать его обратно в список, мы можем использовать функцию списка.
import pandas as pd list(pd.Series(vals).explode()) [1, 2, 3, 4, 5, 2, 3, 2, 6]
Спасибо за чтение. Пожалуйста, дайте мне знать, если у вас есть какие-либо отзывы.