Списки (list) в python с примерами

Методы списков

len()

Метод возвращает длину объекта (списка, строки, кортежа или словаря).

принимает один аргумент, который может быть или последовательностью (например, строка, байты, кортеж, список, диапазон), или коллекцией (например, словарь, множество, frozenset).

list1 =   # список
print(len(list1)) # в списке 3 элемента, в выводе команды будет "3"

str1 = 'basketball'  # строка
print(len(str1))  # в строке 9 букв, в выводе команды будет "9"

tuple1 = (2, 3, 4, 5)  # кортеж
print(len(tuple1))  # в кортеже 4 элемента, в выводе команды будет "4"

dict1 = {'name': 'John', 'age': 4, 'score': 45} # словарь
print(len(dict1))  # в словаре 3 пары ключ-значение, в выводе команды будет "3"

index()

возвращает индекс элемента. Сам элемент передается методу в качестве аргумента. Возвращается индекс первого вхождения этого элемента (т. е., если в списке два одинаковых элемента, вернется индекс первого).

numbers = 
words = 

print(numbers.index(9)) # 4
print(numbers.index(2)) # 1
print(words.index("I")) # 0
print(words.index("JavaScript")) # возвращает ValueError, поскольку 'JavaScript' в списке 'words' нет

Первый результат очевиден. Второй и
третий output демонстрируют возврат индекса
именно первого вхождения.

Цифра «2» встречается в списке дважды,
первое ее вхождение имеет индекс 1,
второе — 2. Метод index() возвращает индекс
1.

Аналогично возвращается индекс 0 для элемента «I».

Если элемент, переданный в качестве аргумента, вообще не встречается в списке, вернется ValueError. Так получилось с попыткой выяснить индекс «JavaScript» в списке .

Опциональные аргументы

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

words = 
print(words.index("am", 2, 5)) # 4

Метод index() будет искать элемент «am» в диапазоне от элемента с индексом 2 (включительно) до элемента с индексом 5 (этот последний элемент не входит в диапазон).

При этом возвращаемый индекс — индекс
элемента в целом списке, а не в указанном
диапазоне.

pop()

Метод удаляет и возвращает последний элемент списка.

Этому методу можно передавать в качестве параметра индекс элемента, который вы хотите удалить (это опционально). Если конкретный индекс не указан, метод удаляет и возвращает последний элемент списка.

Если в списке нет указанного вами индекса, метод выбросит exception .

cities = 

print "City popped is: ", cities.pop() # City popped is: San Francisco
print "City at index 2 is  : ", cities.pop(2) # City at index 2 is: San Antonio

Базовый функционал стека

Для реализации базового функционала
стека в программах на Python часто
используется связка метода pop() и метода
append():

stack = []

for i in range(5):
    stack.append(i)

while len(stack):
    print(stack.pop())

Python reversing list elements

We can reverse elements in a list in a few ways in Python.
Reversing elements should not be confused with sorting in a
reverse way.

reversing.py

#!/usr/bin/env python

# reversing.py

a1 = 
a2 = 
a3 = 

a1.reverse()
print(a1)

it = reversed(a2)
r = list()

for e in it:
    r.append(e)
    
print(r)

print(a3)

In the example, we have three identical string lists.
We reverse the elements in three different ways.

a1.reverse()

The first way is to use the method.

it = reversed(a2)
r = list()

for e in it:
    r.append(e)

The function returns a reverse iterator.
We use the iterator in a for loop and create a new reversed list.

print(a3)

The third way is to reverse the list using the slice syntax, where the
step parameter is set to -1.

$ ./reversing.py



All the three lists were reversed OK.

Базовое использование

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

Пустой список создается при помощи пары квадратных скобок:

empty_list = []
print(type(empty_list)) # <class 'list'>
print(len(empty_list)) # 0

Можно создать список, сразу содержащий
какие-то элементы. В этом случае они
перечисляются через запятую и помещаются
в квадратные скобки. Элементы в списках
могут быть гетерогенными (т. е., разных
типов), хотя обычно бывают гомогенными
(одного типа):

homogeneous_list = 
print(homogeneous_list) # 
print(len(homogeneous_list)) # 6

heterogeneous_list = 
print(heterogeneous_list) # 
print(len(heterogeneous_list)) # 2

Для создания списков также может
использоваться конструктор list:

empty_list = list()  # Создаем пустой список
print(empty_list)  # []
new_list = list("Hello, Pythonist!")  # Новый список создается путем перебора заданного итерируемого объекта.
print(new_list)  # 

Также при создании списков используется List Comprehension, к которому мы еще вернемся.

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

Вывод всего списка:

my_list = 
print(my_list)  # 

Вывести отдельные элементы списка можно, обратившись к ним по индексу (не забываем, что отсчет начинается с нуля).

print(my_list)  # 1
print(my_list)  # 2
print(my_list)  # 9

В Python для обращения к элементам можно
использовать и отрицательные индексы.
При этом последний элемент в списке
будет иметь индекс -1, предпоследний —
-2 и так далее.

print(my_list)  # 25
print(my_list)  # 16
print(my_list)  # 9

Распаковка списков (для python-3). Если
поставить перед именем списка звездочку,
все элементы этого списка будут переданы
функции в качестве отдельных аргументов.

my_list = 
print(my_list)  # 
print(*my_list)  # 1 2 9 16 25

words = 
print(words)  # 
print(*words)  # I love Python I love

Списки мутабельны

Списки — это изменяемые контейнеры.
То есть, вы можете изменять содержимое
списка, добавляя и удаляя элементы.

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

Создадим новый список из элементов списка , а индексы нужных элементов возьмем из списка :

my_list = 
my_index = 
my_new_list =  for i in my_index]
print(my_new_list)  # 

Пример 2: с помощью цикла For Loop

Мы также можем использовать оператор цикла, например While Loop или For Loop, для перебора элементов списка и проверки того, появился ли элемент только один раз.

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

Алгоритм:

  1. Прочтите или возьмите список myList.
  2. Инициализируйте пустой список uniqueList.
  3. Для каждого элемента:
    1. Предположим, что этого элемента нет в myList – инициализировать itemExist значением False.
    2. Для каждого элемента x в uniqueList:
      1. Проверьте, равен ли элемент x. Если да, то этот элемент уже есть в вашем uniqueList. Установите для itemExist значение True и прервите цикл.
    3. Если itemExist имеет значение False, добавьте элемент в uniqueList.
    4. uniqueList содержит уникальные элементы myList:
      1. Предположим, что этого элемента нет в myList – инициализировать itemExist значением False.
      2. Для каждого элемента x в uniqueList:
        1. Проверьте, равен ли элемент x. Если да, то этот элемент уже есть в вашем uniqueList. Установите для itemExist значение True и прервите цикл.
        2. Если itemExist имеет значение False, добавьте элемент в uniqueList.
        3. Проверьте, равен ли элемент x. Если да, то этот элемент уже есть в вашем uniqueList. Установите для itemExist значение True и прервите цикл.
myList = 
uniqueList = []
 
for item in myList :
    itemExist = False
    for x in uniqueList :
        if x == item :
            itemExist = True
            break
    if not itemExist :
        uniqueList.append(item)

print(uniqueList)

Вывод:

Преимущество этого процесса в том, что порядок уникальных элементов не меняется.

Delete/Remove List Elements

We can delete one or more items from a list using the keyword . It can even delete the list entirely.

Output



Traceback (most recent call last):
  File "<string>", line 18, in <module>
NameError: name 'my_list' is not defined

We can use method to remove the given item or method to remove an item at the given index.

The method removes and returns the last item if the index is not provided. This helps us implement lists as stacks (first in, last out data structure).

We can also use the method to empty a list.

Output


o

m

[]

Finally, we can also delete items in a list by assigning an empty list to a slice of elements.

Нарезка списка

В Python вы можете разрезать список, используя следующую форму:

  • Первый аргумент указывает индекс, с которого начинается извлечение. Когда используется отрицательный индекс, он указывает смещение от конца списка. Если этот аргумент опущен, нарезка начинается с индекса 0.
  • Второй аргумент указывает индекс, до которого следует завершить извлечение; результат не включает элемент «стоп». Когда используется отрицательный индекс, он указывает смещение от конца списка. Если этот аргумент опущен или превышает длину списка, нарезка переходит в конец списка.
  • Третий аргумент является необязательным и указывает шаг нарезки. Когда аргумент «шаг» не используется, по умолчанию он равен 1. Когда используется отрицательное значение, срез принимает элементы в обратном порядке.

Результатом нарезки списка является новый список, содержащий извлеченные элементы, а исходный список не изменяется.

Все следующее является допустимым синтаксисом Python:

Ниже приведен базовый пример того, как разрезать список, начиная с элемента с индексом 1 и заканчивая элементом с индексом 4, но не включая его:

Что такое метод sort() в Python?

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

В этом примере у нас есть список чисел, и мы можем использовать метод для сортировки списка в порядке возрастания.

my_list = 

# Выводим неупорядоченный список:
print("Unordered list: ", my_list)

# Сортировка списка
my_list.sort()

# Выводим упорядоченный список
print("Ordered list: ", my_list)

Выполним наш код и получим следующий результат:

Unordered list:  
Ordered list:  

Однако если список уже отсортирован, то мы получим None.

my_list = 

# Это строка вернет None, потому что список уже отсортирован
print(my_list.sort())

Метод может принимать два необязательных аргумента: и .

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

От редакции Pythonist. О функциях и их аргументах у нас есть отдельная статья — «Функции и их аргументы в Python 3».

В следующем примере давайте используем функцию в качестве значения аргумента key. Таким образом, скажет компьютеру отсортировать список имен по длине, от наименьшего к наибольшему.

names = 

print("Unsorted: ", names)
names.sort(key=len)
print("Sorted: ", names)

Вот, что мы получим:

Unsorted:  
Sorted:  

Аргумент может иметь логическое значение: (Истина) или (Ложь).

В следующем примере укажет компьютеру отсортировать список в обратном алфавитном порядке.

names = 

print("Unsorted: ", names)
names.sort(reverse=True)
print("Sorted: ", names)

# Результат:
# Unsorted:  
# Sorted:  

List Methods

Method Description Examples

Adds an item (x) to the end of the list. This is equivalent to .

a =
print(a)
a.append(«ant»)
print(a)Result

Extends the list by appending all the items from the iterable. This allows you to join two lists together. This method is equivalent to .

a =
print(a)
a.extend()
print(a)Result

Inserts an item at a given position. The first argument is the index of the element before which to insert. For example, inserts at the front of the list.

a =
print(a)
a.insert(0, «ant»)
print(a)
a.insert(2, «fly»)
print(a)Result

Removes the first item from the list that has a value of x. Returns an error if there is no such item.

a =
print(a)
a.remove(«moth»)
print(a)Result

Removes the item at the given position in the list, and returns it. If no index is specified, removes and returns the last item in the list.

# Example 1: No index specified
a =
print(a)
a.pop()
print(a)

# Example 2: Index specified
a =
print(a)
a.pop(1)
print(a)Result

Removes all items from the list. Equivalent to del .

a =
print(a)
a.clear()
print(a)Result


[]

Returns the position of the first list item that has a value of . Raises a if there is no such item.

The optional arguments and are interpreted as in the slice notation and are used to limit the search to a particular subsequence of the list. The returned index is computed relative to the beginning of the full sequence rather than the start argument.

a =
print(a.index(«ant»))
print(a.index(«ant», 2))Result

1
3

Returns the number of times x appears in the list.

a =
print(a.count(«bee»))
print(a.count(«ant»))
print(a.count(«»))Result

1
2
0

Sorts the items of the list in place. The arguments can be used to customize the operation.

Specifies a function of one argument that is used to extract a comparison key from each list element. The default value is (compares the elements directly).
Boolean value. If set to , then the list elements are sorted as if each comparison were reversed.

a =
a.sort()
print(a)

a =
a.sort(reverse=True)
print(a)

a =
a.sort()
print(a)

a =
a.sort(key=len)
print(a)

a =
a.sort(key=len, reverse=True)
print(a)Result

Reverses the elements of the list in place.

a =
a.reverse()
print(a)

a =
a.reverse()
print(a)Result

Returns a shallow copy of the list. Equivalent to .

# WITHOUT copy()
a =
b = a
b.append(«ant»)
print(a)
print(b)

# WITH copy()
a =
b = a.copy()
b.append(«ant»)
print(a)
print(b)Result

Индексация списков в Python

Вы заметили, что элемент oatmeal cookies идет в списке третьим, но чтобы его заменить, мы использовали индекс ? Дело в том, что индексация начинается с нуля. В Python индекс — это по сути отступ от начала списка.

Первый элемент имеет индекс (нет никакого отступа, элемент в самом начале списка). Второй элемент имеет индекс . И так далее. В общем, если в списке элементов, последний из них будет иметь индекс .

Попытавшись обратиться к элементу по несуществующему индексу, мы получим ошибку — IndexError.

В нашем примере у нас есть список покупок из 6 элементов (диапазон индексов 0-5). Как показано в коде ниже, если мы попытаемся обратиться к элементу под индексом 6, мы получим ошибку, потому что элемента с таким индексом просто нет.

print(shopping_list)
# Вывод
>> --------------------------------------------------------------------------
IndexError                                Traceback (most recent call last)
<ipython-input-21-a9f3b9517136> in <module>()
----> 1 shopping_list

IndexError: list index out of range

С другой стороны, мы можем использовать отрицательные индексы. Последний элемент списка имеет индекс , предпоследний — и так далее.

print(shopping_list)
# Вывод
>> paint

Так же, как список покупок может содержать любые товары (фрукты, овощи, сладости и т. п.), список в Python может содержать элементы любого типа.

Таким образом, список вполне может содержать в себе другие списки в качестве элементов. Это называется вложенностью, а подобные списки — вложенными.

Вот пример вложенного списка покупок, содержащего два списка поменьше:

🔸 Эффективность

Подождите! Я только что сказал тебе, что это быстрее, чем …

Но насколько быстрее?

Давайте проверим их эффективность использования времени с помощью модуля timeit .

Чтобы использовать этот модуль в своей программе Python, вам необходимо импортировать его:

В частности, мы будем использовать функцию timeit из этого модуля, которую вы можете вызвать с помощью этого синтаксиса:

Совет: код повторяется несколько раз, чтобы уменьшить разницу во времени, которая может возникнуть из-за внешних факторов, таких как другие процессы, которые могут выполняться в этот конкретный момент. Это делает результаты более надежными для сравнения.

По твоим следам … готовься … готово! Вот код и вывод:

Сначала мы импортируем модуль.

Затем мы начинаем тестировать каждый синтаксис.

Тестирование :

Тестирование :

Совет: обратите внимание, что код, который вы хотите отсортировать , должен быть заключен в одинарные или двойные кавычки. Время, возвращаемое функцией, выражается в секундах

Сравните эти результаты:

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

Я уверен, что вы, должно быть, спросите прямо сейчас: почему это менее эффективно, чем если бы они делали то же самое?

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

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

Removing elements from Python list

Previously we have added items to a list. Now we will be removing them
from a list.

removing.py

#!/usr/bin/env python

# removing.py

langs = 
print(langs)

lang = langs.pop(3)
print("{0} was removed".format(lang))

lang = langs.pop()
print("{0} was removed".format(lang))

print(langs)

langs.remove("Ruby")
print(langs)

The method removes and returns an element with a specified index
or the last element if the index number is not given.
The method removes a particular item from a list.

lang = langs.pop(3)
print("{0} was removed".format(lang))

We take away the element which has index 3. The method
returns the name of the removed element; it is printed to the console.

lang = langs.pop()
print("{0} was removed".format(lang))

The last element from the list, namely string, is removed
from the list.

langs.remove("Ruby")

This line removes a string from the list.


Lua was removed
JavaScript was removed


From the ouput of the script we can see the effects of the described methods.

A keyword can be used to delete list elements as well.

removing2.py

#!/usr/bin/env python

# removing2.py

langs = 
print(langs)

del langs
print(langs)

#del langs

del langs
print(langs)

We have a list of strings. We use the keyword to delete
list elements.

del langs

We remove the second string from the list. It is the string.

#del langs

We can delete only existing elements. If we uncomment the code line, we will
receive an message.

del langs

Here we remove all the remaining elements from the list. The
characters refer to all items of a list.

$ ./removing2.py


[]

This is the example output.

Сортировка списков в Python

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

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

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

shopping_list.sort()
print(shopping_list)
# Вывод
>> 

Еще один полезный метод — . С его помощью можно узнать, сколько раз определенный элемент встречается в списке. вернет количество вхождений в список .

Python copying lists

There are several ways how we can copy a list in Python.
We will mention a few of them.

copying.py

#!/usr/bin/env python

# copying.py

import copy

w = 

c1 = w
c2 = list(w)
c3 = copy.copy(w)
c4 = copy.deepcopy(w)
c5 = 

c6 = []

for e in w:
    c6.append(e)
    
c7 = []
c7.extend(w)

print(c1, c2, c3, c4, c5, c6, c7)

We have a list of three strings. We make a copy of the list
seven times.

import copy

We import the module which has two methods for copying.

c1 = w

A list is copied using the slice syntax.

c2 = list(w)

The function creates a copy of a list when it takes
a list as a parameter.

c3 = copy.copy(w)
c4 = copy.deepcopy(w)

The method produces a shallow copy of a list. The
produces a deep copy of a list.

c5 = 

A copy of a string is created using list comprehension.

c6 = []

for e in w:
    c6.append(e)

A copy created by a loop.

c7 = []
c7.extend(w)

The method can be used to create a copy
too.

$ ./copying.py
   
   

Seven copies of a string list were created using different techniques.

List Functions

The following Python functions can be used on lists.

Method Description Examples

Returns the number of items in the list.

a =
print(len(a))Result

3

The constructor returns a mutable sequence list of elements. The iterable argument is optional. You can provide any sequence or collection (such as a string, list, tuple, set, dictionary, etc). If no argument is supplied, an empty list is returned.

print(list())
print(list([]))
print(list())
print(list(, ]))

a = «bee»
print(list(a))

a = («I», «am», «a», «tuple»)
print(list(a))

a = {«I», «am», «a», «set»}
print(list(a))Result

[]
[]

, ]


or

Returns the largest item in an iterable (eg, list) or the largest of two or more arguments.

The key argument specifies a one-argument ordering function like that used for .

The default argument specifies an object to return if the provided iterable is empty. If the iterable is empty and default is not provided, a is raised.

If more than one item shares the maximum value, only the first one encountered is returned.

a =
print(max(a))

a =
print(max(a))

a =
b =
print(max(a, b))Result

moth
wasp

or

Returns the smallest item in an iterable (eg, list) or the smallest of two or more arguments.

The key argument specifies a one-argument ordering function like that used for .

The default argument specifies an object to return if the provided iterable is empty. If the iterable is empty and default is not provided, a is raised.

If more than one item shares the minimum value, only the first one encountered is returned.

a =
print(min(a))

a =
print(min(a))

a =
b =
print(min(a, b))Result

bee
ant

or

Represents an immutable sequence of numbers and is commonly used for looping a specific number of times in loops.

It can be used along with to return a list of items between a given range.

print(list(range(10)))
print(list(range(1,11)))
print(list(range(51,56)))
print(list(range(1,11,2)))Result

Проверяем наш связный список

Давайте все это проверим. Начнем с создания нового объекта Node. Назовем его (две латинские буквы «l» в нижнем регистре как сокращение Linked List). Назначим ему значение 1.

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

Как нам увидеть, как выглядит наш список? Теоретически, выглядеть он должен следующим образом:

Но нет способа вывести его именно в таком виде. Нам нужно пройти список, выводя каждое значение. Вы же помните, как проходить список? Мы только что это делали. Повторим:

  1. Создаем переменную, указывающую на .
  2. Если есть следующий узел, перемещаемся к этому узлу.

И просто выводим в каждом узле. Мы начинаем с шага № 1: создаем новую переменную и назначаем ее головным элементом списка.

Далее мы выводим первый узел. Почему мы не начали с цикла while? Цикл while проитерируется только дважды, потому что только у двух узлов есть (у последнего узла его нет). В информатике это называется ошибкой на единицу (когда нужно сделать что-то Х раз плюс 1). Это можно представить в виде забора. Вы ставите столб, затем секцию забора, и чередуете пару столько раз, сколько нужно по длине.

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

Для начала мы выведем первый узел, а затем запустим цикл while для вывода всех последующих узлов.

node = ll
print(node.data)
while node.next:
    node = node.next
    print(node.data)

Запустив это для нашего предыдущего списка, мы получим в консоли:

Ура! Наш связный список работает.

Access List Elements

There are various ways in which we can access the elements of a list.

List Index

We can use the index operator to access an item in a list. In Python, indices start at 0. So, a list having 5 elements will have an index from 0 to 4.

Trying to access indexes other than these will raise an . The index must be an integer. We can’t use float or other types, this will result in .

Nested lists are accessed using nested indexing.

Output

p
o
e
a
5
Traceback (most recent call last):
  File "<string>", line 21, in <module>
TypeError: list indices must be integers or slices, not float

Negative indexing

Python allows negative indexing for its sequences. The index of -1 refers to the last item, -2 to the second last item and so on.

When we run the above program, we will get the following output:

e
p

List indexing in Python

Доступ к элементам вложенного списка

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

nested_list = , , 7]

# first element in the nested sequence at index 1
print(nested_list)

# second element in the nested sequence at index 1
print(nested_list)

# third element in the nested sequence at index 2
print(nested_list)

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

Мы также можем использовать отрицательные индексы с вложенными списками. Приведенный выше фрагмент кода можно переписать следующим образом.

nested_list = 

# first element in the nested sequence at third last index
print(nested_list)

# last element in the nested sequence at third last index
print(nested_list)

# last element in the nested sequence at second last index
print(nested_list)

Python List Methods

Methods that are available with list objects in Python programming are tabulated below.

They are accessed as . Some of the methods have already been used above.

Methods Descriptions
append() adds an element to the end of the list
extend() adds all elements of a list to another list
insert() inserts an item at the defined index
remove() removes an item from the list
pop() returns and removes an element at the given index
clear() removes all items from the list
index() returns the index of the first matched item
count() returns the count of the number of items passed as an argument
sort() sort items in a list in ascending order
reverse() reverse the order of items in the list
copy() returns a shallow copy of the list

Some examples of Python list methods:

Output

1
2

Зачем уметь создавать связный список на Python?

Зачем вообще может понадобиться создавать собственный связный список на Python? Это хороший вопрос. Использование связных списков имеет некоторые преимущества по сравнению с использованием просто списков Python.

Традиционно вопрос звучит как «чем использование связного списка лучше использования массива». Основная идея в том, что массивы в Java и других ООП-языках имеют фиксированный размер, поэтому для добавления элемента приходится создавать новый массив с размером N + 1 и помещать в него все значения из предыдущего массива. Пространственная и временная сложность этой операции — O(N). А вот добавление элемента в конец связного списка имеет постоянную временную сложность (O(1)).

Списки в Python это не настоящие массивы, а скорее реализация динамического массива, что имеет свои преимущества и недостатки. В Википедии есть .

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

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

Python indexing list elements

Elements in a Python list can be accessed by their index. Index
numbers are integers; they start from zero. Indexes can be negative; negative indexes
refer to elements from the end of the list. The first item in a list has index 0,
the last item has -1.

indexing.py

#!/usr/bin/env python

# indexing.py

n = 

print(n)
print(n)
print(n)

print(n)
print(n)

We can access an element of a list by its index. The index is placed between the
square brackets after the name of the list.

print(n)
print(n)
print(n)

These three lines print the first, the last and the last but one item of the
list.

print(n)
print(n)

The two lines print the fourth and sixth element of the list.

$ ./indexing.py
1
8
7
4
6

This is example output.

The method looks for a particular element and
returns its lowest index. The start and end are optional parameters that limit the
search to given boundaries.

indexing2.py

#!/usr/bin/env python

# indexing2.py

n = 

print(n.index(1))
print(n.index(2))

print(n.index(1, 1))
print(n.index(2, 2))

print(n.index(1, 2, 5))
print(n.index(3, 4, 8))

A code example with the method.

print(n.index(1))
print(n.index(2))

These two lines print the indexes of the leftmost 1, 2 values of
the n list.

print(n.index(1, 1))
print(n.index(2, 2))

Here we search for values 1 and 2 after specified indexes.

print(n.index(1, 2, 5))

Here we search for value 1 between values with indexes 2 and 5.

$ ./indexing2.py
0
1
4
5
4
6

This is example output.