Списки Python

Содержание
Введение
Обрезать список
.append(): добавить элемент в конец
.extend(): добавить iterable в конец
Копировать список
len(): длина списка
.insert(): добавить в любое место
split() и join()
.pop(): удалить последний элемент
.pop(): удалить любой элемент
del
reverse() и sort()
zip
Как создавать списки
С помощью цикла for
С помощью map()
list comprehension: абстракция списка
Похожие статьи

Введение

Из официальной документации

list A built-in Python sequence. Despite its name it is more akin to an array in other languages than to a linked list since access to elements is O(1).

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

Доступ к элементам O(1) означает что скорость, с которой вы запросив элемент по его индексу получите результат, равна одной операции.

Под каждый элемент списка выделен одинаковый размер памяти, например у меня это 8 байт. Когда вы вызываете элемент с индексом i Python знает адрес памяти нулевого элемента списка и просто прибавляет к нему 8 умноженное на i

Список - это изменяемый объект.

Чтобы создать список нужно воспользоваться квадратными скобками []

lst = ['a', 'b', 'c']
print(lst)

['a','b','c']

Получился список из трёх элементов.

У каждого есть два уникальных индекса. Один индекс соответсвует обходу списка слева направо 0, 1, 2. Второй соответствует обходу в обратную сторону -0, -1, -2

Индекс 'a' = 0 либо -0, индекс 'b' = 1 либо -2, индекс 'c' = 2 либо -1.

Можно пользоваться индексом и в обратную сторону. Тогда индекс c = -1, индекс b = -2, индекс a = -3

Элементabc
Индекс012
Индекс --3-2-1

Обрезать список

При использовании слайсов вида

[x:y]

Элементом с индексом x включается а y нет.

Рассмотрим список

l = [100, 200, 300, 400, 500]

print(l[1:3])

[200, 300]

Элемент с индексом 3 это 400 и он не попал в результат.

Можно использовать заведомо несуществующий индекс. Если он справа слайс будет продолжен до последнего элемента. Если он слева то вернётся пустой список. Exception не появится.

print("l[:10]:\n", l[:10]) print("l[10:]:\n", l[10:]) print("l[10:2]:\n", l[10:2])

l[:10]: [100, 200, 300, 400, 500] l[10:] [] l[10:2] []

l = [100, 200, 300, 400, 500] print("l: ", l) print("l[0]:\n", l[0]) print("l[-0]:\n", l[-0]) print("l[1]:\n", l[1]) print("l[-1]:\n", l[-1]) print("l[1:3]:\n", l[1:3]) print("l[1:-1]:\n", l[1:-1]) print("l[2:]:\n", l[2:]) print("l[:2]:\n", l[:2]) print("l[:10]:\n", l[:10]) print("l[10:]:\n", l[10:]) # All list elements print("l[:]:\n", l[:])

l: [100, 200, 300, 400, 500] l[0]: 100 l[-0]: 100 l[1]: 200 l[-1]: 500 l[1:3]: [200, 300] l[1:-1]: [200, 300, 400] l[2:]: [300, 400, 500] l[:2]: [100, 200] l[:]: [100, 200, 300, 400, 500] l[:10]: [100, 200, 300, 400, 500] l[10:] []

append()

Чтобы добавить в конец списка новый элемент применяется метод append()

Операция

x.append("z")

эвивалентна

x[len(x):] = "z"

x.append("z") и x[len(x):] = "z" дадут одинаковый результат но в целом x.append(что-то) и x[len(x):] = что-то - не являются полными аналогами так как если что-то - это

Пример

x = ['a','b','c'] x.append('d') print(x) print(len(x)) x[len(x):] = 'e' print(x) print(len(x))

['a','b','c','d'] 4 ['a','b','c','d','e'] 5

Нужно понимать, что .append() добавляет что-то как один последний элемент списка.

То есть, если вы хотите совместить два списка .append() вместо этого запишет второй список как последний элемент первого.

first = ['a', 'b'] second = ['c', 'd'] first.append(second) print(first)

['a', 'b', ['c', 'd']]

Для соединения списков в один используется .extend()

Другие способы добавлять в список

>>> a = [0, 1, 2] >>> b = [3, 4, 5] >>> c = a + b >>> c [0, 1, 2, 3, 4, 5] >>> c += [6, 7, 8] >>> c [0, 1, 2, 3, 4, 5, 6, 7, 8] >>> c.extend([9, 10, 11]) >>> c [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]

.extend()

list.extend(iterable) Extend the list by appending all the items from the iterable. Equivalent to a[len(a):] = iterable.

first = ['a', 'b'] second = ['c', 'd'] first.extend(second) print(first)

['a', 'b', 'c', 'd']

Копировать список

# Copy l = [100, 200, 300, 400, 500] t = l print("\n# t = l") print("t is l =", t is l) # True r = l[:] print("\n# r = l[:]") print("r is l = ", r is l) # False print("r == l = ", r == l) # True u = l.copy() print("\n# u = l.copy()") print("u is l = ", u is l) # False v = list(l) print("\n# v = list(l)") print("v is l = ", v is l) # False

# t = l t is l = True # r = l[:] r is l = False r == l = True # u = l.copy() u is l = False # v = list(l) v is l = False

a = [ [1, 2], [3, 4] ] b = a[:] print(a is b) # False print(a == b) # True print(a[0]) # [1, 2] print(b[0]) # [1, 2] print(a[0] is b[0]) # True a[0] = [8, 9] print(a[0]) # [8, 9] print(b[0]) # [1, 2] a[1].append(5) print(a[1]) # [3, 4, 5] print(b[1]) # [3, 4, 5] print(a) # [[8, 9], [3, 4, 5]] print(b) # [[1, 2], [3, 4, 5]]

False True [1, 2] [1, 2] True [8, 9] [1, 2] [3, 4, 5] [3, 4, 5] [[8, 9], [3, 4, 5]] [[1, 2], [3, 4, 5]]

К спискам можно применять умножение

s = [ [-1, +1] ] * 5 print(s) s[2].append(7) print(s)

[21, 37, 21, 37, 21, 37, 21, 37] [0, 0, 0, 0, 0, 0, 0, 0, 0]

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

s = [ [-1, +1] ] * 5 print(s) s[2].append(7) print(s)

[[-1, 1], [-1, 1], [-1, 1], [-1, 1], [-1, 1]] [[-1, 1, 7], [-1, 1, 7], [-1, 1, 7], [-1, 1, 7], [-1, 1, 7]]

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

w = "the heihei.ru website was forked from eth1.ru in 2018 simultaneously with the topbicyle.ru website".split() print(w) i = w.index('was') print(i) # 3 print(w[i]) # was print(w.count("the")) # 2 print("heihei.ru" in w) # True print("eth1.ru" not in w) # True

['the', 'heihei.ru', 'website', 'was', 'forked', 'from', 'eth1.ru', 'in', '2018', 'simultaneously', 'with', 'the', 'topbicyle.ru', 'website'] 3 was 2 True True

len()

Длину списка можно узнать с помощью функции len()

>>> l = ["Pluralsight", "OTUS", "GeekBrains"]
>>> print(len(l))

3

insert()

Чтобы добавить новый элемент в начало списка применяется метод insert()

lst.insert(0, 'z')
print(l)

['z','a','b','c','d']

print(len(lst))

5

С помощью insert() можно вставить элемент в любое место в списке

Нужно передать в insert() индекс того места в которое вы хотите поместить элемент

lst.insert(3, 'j')
print(lst)

['z','a','b','j','c','d']

print(len(lst))

6

split() и join()

Превратить строку в список можно с помощью split()

Собрать список в строку - с помощью join()

>>> s = 'Please visit website' >>> s 'Please visit website' >>> a = s.split() >>> a ['Please', 'visit', 'website'] >>> a.insert(2, "topbicycle.ru") >>> a ['Please', 'visit', 'topbicycle.ru', 'website'] >>> s = ' '.join(a) >>> s 'Please visit topbicycle.ru website'

Чтобы удалить последний элемент списка применяется метод pop()

lst = ['a', 'b', 'c']
lst.pop()
print(lst)

['a', 'b']

print(len(lst))

2

pop(0)

Чтобы удалить первый элемент списка

lst = ['a', 'b', 'c']
lst.pop(0)
print(lst)

['b', 'c']

print(len(lst))

2

Чтобы удалить произвольный элемент списка передайте в pop() его индекс

lst = ['a', 'b', 'c']
lst.pop(1)
print(lst)

['a', 'c']

print(len(lst))

2

del

Удалять элементы из списка можно с помощью del

>>> c = "Armenia Finland Georgia Germany Italy Norway Russia Spain Sweden".split() >>> c ['Armenia', 'Finland', 'Georgia', 'Germany', 'Italy', 'Norway', 'Russia', 'Spain', 'Sweden'] >>> del c[3] >>> c ['Armenia', 'Finland', 'Georgia', 'Italy', 'Norway', 'Russia', 'Spain', 'Sweden'] >>> c.remove('Norway') >>> c ['Armenia', 'Finland', 'Georgia', 'Italy', 'Russia', 'Spain', 'Sweden'] >>> del c[c.index('Sweden')] >>> c ['Armenia', 'Finland', 'Georgia', 'Italy', 'Russia', 'Spain']

reverse() и sort()

>>> d = [1, 5, 70] >>> d.reverse() >>> d [70, 5, 1] >>> e = [8, 3, 14] >>> e.sort() >>> e [3, 8, 14] >>> e.sort(reverse=True) >>> e [14, 8, 3]

>>> w = 'Please visit topbicycle.ru website'.split() >>> w ['Please', 'visit', 'topbicycle.ru', 'website'] >>> w.sort(key=len) >>> w ['visit', 'Please', 'website', 'topbicycle.ru']

>>> x = [4, 9, 2, 1] >>> y = sorted(x) >>> y [1, 2, 4, 9] >>> x [4, 9, 2, 1] >>> p = [9, 3, 1, 0] >>> q = reversed(p) >>> q <list_reverseiterator object at 0x7f93ddd42280> >>> list(q) [0, 1, 3, 9]

zip

С помощью функции zip() можно из двух списков создать список кортежей.

>>> languages = ['Java', 'Python', 'JavaScript'] >>> versions = [18, 3, 2015] >>> result = zip(languages, versions) >>> print(list(result))

[('Java', 18), ('Python', 3), ('JavaScript', 2015)]

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

Превратить строку в список Python изображение с сайта www.devhops.ru
Str → List
Без цензуры

С помощью []

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

site = "testsetup.ru" print(type(site)) site = [site] print(type(site))

python str_to_list.py

<class 'str'> <class 'list'>

С помощью цикла for

Можно использовать цикл for для создания списка.

Это делается за три шага

  1. Создать пустой список
  2. Пройтись по итерируемому объекту или нескольким объектам.
  3. Дописать каждый элемент в конец списка

Если вы хотите создать список, содержащий первые десять полных квадратов, то вы можете выполнить эти шаги в трех строках кода:

>>> squares = [] >>> for i in range(10): ... squares.append(i * i) >>> squares

Или даже в двух

>>> squares = [] >>> for i in range(10): squares.append(i * i) >>> squares

[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

Сперва создаётся пустой список, squares.

Затем, с помощью цикла for происходит итерация по range(10).

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

С помощью map()

map() предоставляет альтернативный подход, основанный на функциональном программировании.

В map() передаются функция и итерируемый объект и map() создаёт новый итерируемый объект.

o = map(function, iterable)

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

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

txns = [1.11, 23.45, 45.5, 61.4] TAX_RATE = .08 def get_price_with_tax(txn): return txn * (1 + TAX_RATE) final_prices = map(get_price_with_tax, txns) print(list(final_prices))

[1.1988, 25.326, 49.14, 66.312]

Здесь у вас есть итеративный txns и функция get_price_with_tax(). Вы передаете оба этих аргумента в map() и сохраняете результирующий объект в final_prices.

Вы можете легко преобразовать этот объект карты в список с помощью функции list().

РЕКЛАМА от Google. Контент сгенерирован Google. Может быть недоступен в вашем регионе.

Конец рекламы от Google. Если в блоке пусто считайте это рекламой моей телеги

Абстракция списка

List Comprehension - Абстракция списков или списковое включение или генератор списков.

Третий способ создавать списки это абстракция списков.

С помощью этого элегантного похода можно переписать цикл for из первого примера всего в одну строку:

>>> squares = [i * i for i in range(10)] >>> squares

[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

Подробнее про этот способ вы можете прочитать в статье «List Comprehension в Python»

Похожие статьи
Встроенные коллекции
Списки []
list comprehension: Генератор списков
Python
if, elif, else
Циклы
Генератор словарей
Генератор множеств

РЕКЛАМА хостинга Beget, которым я пользуюсь более десяти лет

Изображение баннера

Конец рекламы хостинга Beget, который я всем рекомендую.

Поиск по сайту

Подпишитесь на Telegram канал @aofeed чтобы следить за выходом новых статей и обновлением старых

Перейти на канал

@aofeed

Задать вопрос в Телеграм-группе

@aofeedchat

Контакты и сотрудничество:
Рекомендую наш хостинг beget.ru
Пишите на info@urn.su если Вы:
1. Хотите написать статью для нашего сайта или перевести статью на свой родной язык.
2. Хотите разместить на сайте рекламу, подходящую по тематике.
3. Реклама на моём сайте имеет максимальный уровень цензуры. Если Вы увидели рекламный блок недопустимый для просмотра детьми школьного возраста, вызывающий шок или вводящий в заблуждение - пожалуйста свяжитесь с нами по электронной почте
4. Нашли на сайте ошибку, неточности, баг и т.д. ... .......
5. Статьи можно расшарить в соцсетях, нажав на иконку сети: