Списки Python
Введение
Чтобы создать список нужно воспользоваться квадратными скобками []
l = ['a','b','c']
print(l)
['a','b','c']
Получился список из трёх элементов. У каждого есть уникальный индекс.
Индекс 'a' = 0, индекс 'b' = 1, индекс 'c' = 2.
Можно пользоваться индексом и в обратную сторону. Тогда индекс c = -1, индекс b = -2, индекс a = -3
Элемент | a | b | c |
---|---|---|---|
Индекс | 0 | 1 | 2 |
Индекс - | -3 | -2 | -1 |
Обрезать список
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]) # All list elements print("l[:]:\n", l[:])
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]
Копировать список
# 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 devhops.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', 'devhops.ru', 'in', '2018', 'simultaneously', 'with', 'the', 'topbicyle.ru', 'website'] 3 was 2 True True
len()
Длину списка можно узнать с помощью функции len()
>>> l = ["Pluralsight",
"OTUS",
"GeekBrains"]
>>> print(len(l))
3
append()
Чтобы добавить в конец списка новый элемент применяется метод append()
l = ['a','b','c']
l.append('d')
print(l)
['a','b','c','d']
print(len(l))
4
Другие способы добавлять в список
>>> 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]
insert()
Чтобы добавить новый элемент в начало списка применяется метод insert()
l.insert(0, 'z')
print(l)
['z','a','b','c','d']
print(len(l))
5
С помощью insert() можно вставить элемент в любое место в списке
Нужно передать в insert() индекс того места в которое вы хотите поместить элемент
l.insert(3, 'j')
print(l)
['z','a','b','j','c','d']
print(len(l))
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()
l = ['a', 'b', 'c']
l.pop()
print(l)
['a', 'b']
print(len(l))
2
pop(0)
Чтобы удалить первый элемент списка
l = ['a', 'b', 'c']
l.pop(0)
print(l)
['b', 'c']
print(len(l))
2
Чтобы удалить произвольный элемент списка передайте в pop() его индекс
l = ['a', 'b', 'c']
l.pop(1)
print(l)
['a', 'c']
print(len(l))
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)]
Как создавать списки
С помощью цикла for
Можно использовать цикл for для создания списка.
Это делается за три шага
- Создать пустой список
- Пройтись по итерируемому объекту или нескольким объектам.
- Дописать каждый элемент в конец списка
Если вы хотите создать список, содержащий первые десять полных квадратов, то вы можете выполнить эти шаги в трех строках кода:
>>> 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().
Абстракция списка
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 | |
Циклы | |
Абстракция множеств и словарей |