Используйте списки Python как профессионал

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

Давайте подробно разберемся со структурой данных list Python с пошаговыми пояснениями и примерами.

Что такое списки в Python?

Списки - одна из наиболее часто используемых встроенных структур данных в Python. Вы можете создать список, поместив все элементы в квадратные скобки [], разделенные запятыми. Списки могут содержать объекты любого типа, что делает их очень полезными и универсальными.

Основные характеристики списков Python следующие: Это изменяемые, упорядоченные, динамические и тип (последовательность) структуры данных.

Давайте рассмотрим каждую из этих характеристик более подробно;

  • Новые элементы могут быть добавлены или удалены во время выполнения. Списки не являются объектами фиксированного размера, поэтому они называются динамическими структурами данных.
  • Порядок, в котором вы указываете элементы при определении списка, сохраняется, поэтому списки становятся упорядоченными.
  • Списки могут быть изменены после того, как они созданы. Вы можете добавлять, удалять элементы или изменять значение доступных элементов в объекте списка. Вам не нужно иметь еще одну копию объекта списка для его редактирования. Поэтому они называются изменяемыми объектами.
  • Хотя списки Python не имеют фиксированного размера и ограничений, как массивы в C ++ или Java, они по-прежнему представляют собой структуры данных типа массивов, в которых содержащиеся элементы хранятся в памяти последовательно и доступны для порядковый номер, представляющий блок памяти для определенного элемента.
  • Объект списка может содержать повторяющиеся элементы.

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

Давайте разберемся, когда использовать списки вместо другой структуры данных.

  • Когда мы хотим хранить коллекцию разнородных объектов в единой структуре данных. Мы можем хранить любую из примитивных структур данных (целые числа, строки и т. Д.), А также составные структуры данных (списки, наборы, кортежи, словари и т. Д.) Внутри одного объекта списка.
  • Когда мы хотим сохранить порядок данных неизменным. Порядок, в котором мы помещаем элементы в списки, сохраняется, мы можем получить доступ к элементам в том же порядке, в котором мы их помещаем.
  • Поскольку списки изменяемы, не рекомендуется использовать их для хранения данных, которые вообще не следует изменять.

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

Есть много способов создания и инициализации списков. Вы можете использовать квадратные скобки [] или список (повторяемый) конструктор, как показано ниже;

# empty list with square brackets
empty_list = []
# empty list with square brackets
empty_list = list()
# list of integers
integer_list = [1, 2, 3]
# list with mixed data types
mixed_list = [8, "Hi", 3.3]
# list from an iterable object
iterable_list = list("data-science")
# a nested list
nested_list = ["cat", [3, 2], ['d']]

Функции и методы последовательности Python

Списки поддерживают операции последовательности, такие как Индексирование, Нарезка, Членство, Конкатенация, Длина, Итерация и некоторые другие , поскольку они являются объектами типа последовательности.

Индексирование: элементы в списке можно получить с помощью index с помощью оператора индексирования. Индексация Python начинается с нуля. Вы можете использовать отрицательное целое число в качестве индекса, чтобы начать с конца. Если вы используете целое число, превышающее длину списка, вы получите IndexError. Если ваш индекс не является целым, вы получите TypeError.

# list of integers
integer_list = [1, 2, 3, 4, 5, 6, 7]
# indexing
print(integer_list[0]) #prints '1'
print(integer_list[6]) #prints '7'
print(integer_list[-1]) #prints '7'
print(integer_list[-7]) #prints '1'
print(integer_list['a']) #TypeError: list indices must be integers
print(integer_list[7]) #IndexError: index is out of range

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

# list of integers
integer_list = [1, 2, 3, 4, 5, 6, 7]
# slicing with [start:end] takes all elements between 'start' to 'end' does not include 'end' element
print(integer_list[1:3]) # prints '[2, 3]'
# slicing with [start:] includes all elements after 'start' including the 'start'th  element
print(integer_list[2:]) # prints [3, 4, 5, 6, 7]
# slicing with [:ends] includes all elements before 'end' and does not include the 'end'th element
print(integer_list[:5]) # prints [1, 2, 3, 4, 5]
# slicing with negative integers to start indexing from end
print(integer_list[-2:]) # prints [6, 7]
print(integer_list[:-5]) # prints [1, 2]

Членство: вы можете проверить, является ли конкретный объект членом списка или нет. Для этого вы можете использовать операторы членства ‘in’ или ‘not in’.

# list of integers
integer_list = [1, 2, 3, 4, 5, 6, 7]
# membership
4 in integer_list # True
8 in integer_list # False
4 not in integer_list # False
8 not in integer_list # True

Объединение. Вы можете использовать операторы «+» или «*» для объединения списков.

# list of integers
integer_list = [1, 2, 3]
# list of strings
string_list = ['data', 'science', 'rocks']
integer_list + string_list #[1, 2, 3, 'data', 'science', 'rocks']
string_list * 2 #['data', 'science', 'rocks', 'data', 'science', 'rocks']

Длина: если вы передадите список в функцию «len ()», вы получите взамен длину списка.

# list of integers
integer_list = [1, 2, 3, 4, 5, 6, 7]
# len() with lists
len(integer_list) # 7

Итерация: списки - это итерируемые объекты, поэтому вы можете выполнять итерацию по списку с помощью циклов for.

# list of integers
integer_list = [1, 2, 3]
# iterate over list elements
for element in integer_list:
    print(element) # 1 2 3

Другие операции: есть некоторые дополнительные операции, которые применяются к большинству последовательностей, например max (), min (), count (), index (). Давайте посмотрим, как их можно использовать с объектами списка;

# list of integers
integer_list = [1, 2, 3, 1, 8, 1]
# max(), min()
max(integer_list) # 8
min(integer_list) # 1
# count(), index()
integer_list.index(3) # 2
integer_list.index(1) # 0
integer_list.count(1) # 3
integer_list.count(9) # 0

Список методов

Вот остальные методы, которые вы можете использовать со списками-объектами.

  • append (element): добавляет один элемент в конец списка. Этот метод изменяет исходный список и не возвращает новый список;
# list of integers
integer_list = [1, 2, 3]
# append()
integer_list.append(5)
print(integer_list)
# output
# [1, 2, 3, 5]
  • extend (other_list): добавляет элементы из other_list в конец исходного списка;
integer_list = [1, 2, 3]
string_list = ['data', 'science']
# extend()
integer_list.extend(string_list) #[1, 2, 3, 'data', 'science']
integer_list.extend('rocks') #[1, 2, 3, 'data', 'science', 'r', 'o', 'c', 'k', 's']
  • insert (index, element): вставляет один элемент по указанному индексу и сдвигает элементы после него вправо.
string_list = ['data', 'science']
# insert()
string_list.insert(1,'-') #['data', '-', 'science']
string_list.insert(3,'rocks') #['data', '-', 'science', 'rocks']
  • sort (key = None, reverse = False) - сортирует данный список, не возвращает новый объект списка. Функция sort () сортирует список в порядке возрастания. Вы можете указать reverser = True, если вам нужно отсортировать список в порядке убывания. Вы также можете определить собственный порядок сортировки, создав функцию для определения того, какой элемент элементов списка будет использоваться в качестве ключа для упорядочивания. Как вы можете видеть в приведенном ниже примере, функция second_char (string_element) возвращает второй символ каждого строкового элемента в исходном списке. Затем список отсортирован на основе возвращаемого значения функции second_char.
integer_list = [1, 2, 3, 1, 8, 1]
# sort()
integer_list.sort()
print(integer_list)
integer_list.sort(reverse=True)
print(integer_list)
# custom sort
string_list = ['science', 'rocks', 'data']
def second_char(string_element):
  return string_element[1]
string_list.sort(key=second_char, reverse=False)
print(string_list)
  • reverse () - наоборот: просто меняет порядок в списке. Эта функция не возвращает новый список.
  • remove (element): находит первый экземпляр данного элемента и удаляет его. Выбрасывает ValueError, если данный элемент отсутствует.
integer_list = [1, 2, 3, 1, 8, 1]
# remove()
integer_list.remove(1)
print(integer_list) #[2, 3, 1, 8, 1]
integer_list.remove(1)
print(integer_list) #[2, 3, 8, 1]
integer_list.remove(2)
print(integer_list) #[3, 8, 1]
integer_list.remove(9)  #ValueError: list.remove(x): x not in list
  • pop (index): удаляет и возвращает элемент по заданному индексу. Удаляет и возвращает последний элемент, если индекс не указан.
integer_list = [1, 2, 3, 4, 5, 6, 7]
# pop()
integer_list.pop(3)#returns 4
print(integer_list)#[1, 2, 3, 5, 6, 7]
integer_list.pop() #returns 7
print(integer_list)#[1, 2, 3, 5, 6]

Составить список

Понимание списков обеспечивает элегантный и лаконичный способ создания списков. Синтаксис понимания списка;

new_list = [expression for member in iterable(if conditional)]
integer_list = [x for x in range(10) if x % 2 == 0  if x % 5 == 0]
print(integer_list) #[0, 10, 20, 30]

Заключение и основные выводы

Поскольку структуры данных являются фундаментальной частью наших программ, очень важно хорошо разбираться в списках Python для создания эффективных программ.

Я объяснил, почему и когда использовать списки, некоторые из основных выводов перечислены ниже;

  • Основные характеристики списков Python следующие: Это изменяемые, упорядоченные, динамические и тип (последовательность) структуры данных.
  • Мы можем использовать списки, когда хотим сохранить коллекцию разнородных объектов в единой структуре данных.
  • Новые элементы могут быть добавлены или удалены во время выполнения. Списки не являются объектами фиксированного размера, поэтому они называются динамическими структурами данных.
  • Порядок, в котором вы указываете элементы при определении списка, сохраняется, поэтому списки становятся упорядоченными.

Спасибо за чтение!