List extend() в индекс, вставляя элементы списка не только до конца

Я ищу самый pythonic способ реализовать версию функции списка extend, где она распространяется на данный индекс, а не на конец списка.

a_list = [ "I", "rad", "list" ]                                                       
b_list = [ "am", "a" ]
a_list.my_extend( b_list, 1 ) # insert the items from b_list into a_list at index 1

print( a_list ) # would output: ['I', 'am', 'a', 'rad', 'list']

Есть ли способ сделать это, не создавая новый список, например?

a_list = [ "I", "rad", "list" ]
b_list = [ "am", "a" ]
c_list = []

c_list.extend( a_list[:1] )
c_list.extend( b_list     )
c_list.extend( a_list[1:] )

print( c_list ) # outputs: ['I', 'am', 'a', 'rad', 'list']

Этот подход на самом деле не так уж плох, но мне кажется, что это может быть проще. Может ли это?

Ответ 1

Конечно, вы можете использовать индексацию фрагментов:

a_list[1:1] = b_list

Чтобы продемонстрировать общий алгоритм, если вы должны реализовать функцию my_extend в гипотетическом пользовательском классе list, это будет выглядеть так:

def my_extend(self, other_list, index):
    self[index:index] = other_list

Но на самом деле не делайте эту функцию, просто используйте нотацию среза, когда вам нужно.