Тип данных список (list) в Python очень мощный инструмент программиста. Однако, чтобы получить максимальную выгоду от использования списков в Python следует научиться некоторым приемам в работе с ними.
ls = ['one', 2, 3, 'four'] print(type(ls)) print(ls) # Вывод # <class 'list'> # ['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']
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']
ls = [i for i in 'hello world' if i not in [' ', 'e', 'o']] print(ls) # Вывод # ['h', 'l', 'l', 'w', 'r', 'l', 'd']
ls = [i*2 for i in 'hello world' if i not in [' ', 'e', 'o']] print(ls) # Вывод # ['hh', 'll', 'll', 'ww', 'rr', 'll', 'dd']
Диапазон — неизменяемая последовательность целых чисел.
range(stop) | range(start, stop[, step])-> range
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