кстати, одно замечание. часто замечаю такую вещь типа for i in range(n), а после в цикле переменная i не используется, в таких случаях лучше писать for _ in range(n), лодеш - допустимое имя переменной, но стандарт pep8, обговаривает, что его лучше зарезервировать для чего-то, что ты не собираешься использовать. такой цикл как раз явный пример. или ещё например какой-то срез где нам нужно получить первый и последний элемент.
tup = (1, 2, 3, 4, 5)
мы можем сделать так:
first = tup[0]
last = tup[-1]
но можно покрасивше:
first, *_, last = tup
фактически у нас здесь создаться кортеж _, но использовать мы его конечно не будем, и на самом деле питон это поймёт и даже хранить его в памяти не будет, так что за неэффективность по памяти и скорости можно не беспокоиться