Frage Liste extend () zu indizieren, Listenelemente nicht nur bis zum Ende einfügen


Ich suche nach dem pythischsten Weg, um eine Version der Liste zu implementieren extend Funktion, wo es sich auf einen bestimmten Index statt auf das Ende der Liste erstreckt.

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']

Gibt es eine Möglichkeit, dies zu tun, ohne eine neue Liste zu erstellen?

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']

Dieser Ansatz ist eigentlich nicht so schlimm, aber ich habe eine Ahnung, dass es einfacher sein könnte. Kann es?


19
2017-09-11 02:48


Ursprung


Antworten:


Sicher, Sie können die Slice-Indizierung verwenden:

a_list[1:1] = b_list

Um nur den allgemeinen Algorithmus zu demonstrieren, wenn Sie den my_extend Funktion in einer hypothetischen Gewohnheit list Klasse würde es so aussehen:

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

Aber machen Sie das nicht zu einer Funktion, verwenden Sie einfach die Slice-Notation, wenn Sie müssen.


45
2017-09-11 02:51