Метод list.index( ) Синтаксис: [список].index(значение, начало_среза, конец_среза) значение – искомое значение. начало_среза – индекс элемента (порядковый номер, начало отсчета 0), начиная с которого будет осуществляться поиск искомого значения. Необязательный аргумент, по умолчанию равен нулю. конец_среза – индекс элемента, заканчивая которым (сам элемент с индексом равным значению аргумента конец_среза не входит в срез) будет осуществляться поиск искомого значения. Необязательный аргумент, по умолчанию равен индексу последнего элемента списка...
Для начала о том, зачем вообще нужна конструкция return self. Обычно её используют, чтобы сделать возможным так называемый chaining, то есть код вида my_object.method().another_method().do_something(). Но, как мы видим из заголовка статьи, в стандартной библиотеке Python это не используется. Точнее, используется, но не всегда. Для меня этот факт выглядит вполне естественным, хотя я никогда не думал о причинах. А вот тех, кто больше привык с другим языкам программирования, это подбешивает. И все же, почему в Python разрешено делать line = line.strip().lower(), а line.reverse().sort() нельзя? Оказалось у Гвидо есть письмо на этот счет: мутирующие методы должны возвращать None...