=====Списки в Python=====
Тип данных список (list) в Python очень мощный инструмент программиста. Однако, чтобы получить максимальную выгоду от использования списков в Python следует научиться некоторым приемам в работе с ними.
====Список====
ls = ['one', 2, 3, 'four']
print(type(ls))
print(ls)
# Вывод
#
# ['one', 2, 3, 'four']
====Вложенный список====
ls = ['one', 2,['nested list 1', 2, 4], 3, 'four']
print(ls)
# Вывод
# ['one', 2, ['nested list 1', 2, 4], 3, 'four']
====функция list====
ls = list('hello')
ls2 = list((2,3,4))
print(ls, ls2, sep='\n')
# ['h', 'e', 'l', 'l', 'o']
# [2, 3, 4]
Представим себе ситуацию - вам необходимо извлечь все элементы списка и присвоить каждый из них своей определенной переменной. Например, у нас есть список описывающий человека и содержащий следующие элементы:
person_data = ["John", "Smith", 23, "programmer"]
Тогда чтобы извлечь из этого списка и сохранить по-отдельности все элементы следует написать такой код:
user_name, user_surname, user_age, user_occupation = person_data
После этого мы сможем использовать отдельно каждую созданную переменную.
Обратите внимание, что количество создаваемых переменных должно соответствовать количеству элементов в списке, иначе вы получите ошибку.
====Как пользоваться генераторами====
**Генераторами списков** в Python называются однострочные конструкции, которые позволяют создавать новые списки.
==Генератор списков==
ls = [i for i in 'hello']
print(ls)
# Вывод
# ['h', 'e', 'l', 'l', 'o']
==Генератор списков с простым условием==
ls = [i for i in 'hello world' if i != ' ']
print(ls)
# Вывод
# ['h', 'e', 'l', 'l', 'o', 'w', 'o', 'r', 'l', 'd']
==Генератор списков с not in, выводим только согласные==
ls = [i for i in 'hello world' if i not in [' ', 'e', 'o']]
print(ls)
# Вывод
# ['h', 'l', 'l', 'w', 'r', 'l', 'd']
==Генератор списков с i*2==
ls = [i*2 for i in 'hello world' if i not in [' ', 'e', 'o']]
print(ls)
# Вывод
# ['hh', 'll', 'll', 'ww', 'rr', 'll', 'dd']
====Генератор списков RANGE====
Диапазон — неизменяемая последовательность целых чисел.
range(stop) | range(start, stop[, step])-> range
* start=0 : Целое число, которое должно явиться началом последовательности.
* stop : Целое число, на котором должно завершиться формирование последовательности. Не входит в последовательность.
* step=1 : Целое число — шаг, с которым должна формироваться последовательность. При попытке задать нуль, возбуждается ValueError
type(range(3)) # class 'range'
list(range(5)) # [0, 1, 2, 3, 4]
list(range(1, 5)) # [1, 2, 3, 4]
list(range(0, 10, 3)) # [0, 3, 6, 9]
list(range(0, -5, -1)) # [0, -1, -2, -3, -4]
list(range(0)) # []
list(range(1, 0)) # []
ls = [x for x in range(10)]
print(ls)
# [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
Преимуществом данного типа по сравнению с обычным списком или кортежем, является то, что он занимает всегда одинаковое небольшое количество памяти вне зависимости от того, какой длины диапазон представляет. Это возможно благодаря тому, что в памяти хранятся только параметры, а значения вычисляются по мере необходимости.
Последовательности реализуют интерфейс collections.abc.Sequence ABC, и предоставляют такие возможности как проверка вхождения, поиск по индексу, срезы и отрицательную индексацию.
====Как извлечь элементы из подсписков====
Так же, часто возникает ситуация, когда необходимо извлечь элементы из подспиков списка.
Например имеем такой список:
outer = [[1,2,3], [4,5,6], [7,8,9]]
Задача создать отдельный список содержащий все элементы подсписков данного списка. Выполнить эту задачу можно при помощи все того же генератора списков:
new_list = [item for sublist in outer for item in sublist]
print(new_list)
#Таким образом получаем список со всеми элементами:[1, 2, 3, 4, 5, 6, 7, 8, 9]
====Табица умножения====
def table(r1, r2):
for j in r1:
for i in r2:
print(f'{i} * {j} = {j * i}\t', end='')
print('')
print('')
print('Таблица умножения:',end='\n\n')
table(range(1,11), range(1,6))
table(range(1,11), range(6,11))
Таблица умножения:
1 * 1 = 1 2 * 1 = 2 3 * 1 = 3 4 * 1 = 4 5 * 1 = 5
1 * 2 = 2 2 * 2 = 4 3 * 2 = 6 4 * 2 = 8 5 * 2 = 10
1 * 3 = 3 2 * 3 = 6 3 * 3 = 9 4 * 3 = 12 5 * 3 = 15
1 * 4 = 4 2 * 4 = 8 3 * 4 = 12 4 * 4 = 16 5 * 4 = 20
1 * 5 = 5 2 * 5 = 10 3 * 5 = 15 4 * 5 = 20 5 * 5 = 25
1 * 6 = 6 2 * 6 = 12 3 * 6 = 18 4 * 6 = 24 5 * 6 = 30
1 * 7 = 7 2 * 7 = 14 3 * 7 = 21 4 * 7 = 28 5 * 7 = 35
1 * 8 = 8 2 * 8 = 16 3 * 8 = 24 4 * 8 = 32 5 * 8 = 40
1 * 9 = 9 2 * 9 = 18 3 * 9 = 27 4 * 9 = 36 5 * 9 = 45
1 * 10 = 10 2 * 10 = 20 3 * 10 = 30 4 * 10 = 40 5 * 10 = 50
6 * 1 = 6 7 * 1 = 7 8 * 1 = 8 9 * 1 = 9 10 * 1 = 10
6 * 2 = 12 7 * 2 = 14 8 * 2 = 16 9 * 2 = 18 10 * 2 = 20
6 * 3 = 18 7 * 3 = 21 8 * 3 = 24 9 * 3 = 27 10 * 3 = 30
6 * 4 = 24 7 * 4 = 28 8 * 4 = 32 9 * 4 = 36 10 * 4 = 40
6 * 5 = 30 7 * 5 = 35 8 * 5 = 40 9 * 5 = 45 10 * 5 = 50
6 * 6 = 36 7 * 6 = 42 8 * 6 = 48 9 * 6 = 54 10 * 6 = 60
6 * 7 = 42 7 * 7 = 49 8 * 7 = 56 9 * 7 = 63 10 * 7 = 70
6 * 8 = 48 7 * 8 = 56 8 * 8 = 64 9 * 8 = 72 10 * 8 = 80
6 * 9 = 54 7 * 9 = 63 8 * 9 = 72 9 * 9 = 81 10 * 9 = 90
6 * 10 = 60 7 * 10 = 70 8 * 10 = 80 9 * 10 = 90 10 * 10 = 100