Во-первых, не используйте list
в качестве идентификатора.
В вашей функции слияния, в блоке else вы возвращаете то, что возвращается функцией слияния. А в функции слияния вы ничего не возвращаете.
Кроме того, из-за рекурсии в функции слияния вы заканчиваете тем, что устанавливаете переменные lista
и listb
для возвращаемых значений функции слияния, которые могут отсутствовать. поскольку mergesort
ничего не возвращает (таким образом, None).
Когда вы отправляете эти lista
и listb
в mergesort в качестве аргументов, вы фактически отправляете None в таких случаях, и, таким образом, вы получаете ошибку, когда пытаетесь получить их длину с помощью функции len
.
Чтобы устранить ошибку, вы можете отправить измененные результаты для слияния или работать со списком, который доступен в области действия обеих функций.