Содержание

Списки в Python

Тип данных список (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']

функция 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
    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