Подробное практическое руководство с примерами.

Список - это встроенная структура данных в 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]

Спасибо за чтение. Пожалуйста, дайте мне знать, если у вас есть какие-либо отзывы.