2013-03-18 8 views
6

Zastanawiam się, czy istnieje sposób w Pythonie do używania .extend, ale nie zmieniaj oryginalnej listy. Chciałbym wynik wyglądać mniej więcej tak:Python: list.extend bez mutowania oryginalnej zmiennej

>> li = [1, 2, 3, 4] 
>> li 
[1, 2, 3, 4] 
>> li.extend([5, 6, 7]) 
[1, 2, 3, 4, 5, 6, 7] 
>> li 
[1, 2, 3, 4] 

Próbowałem google to na kilka różnych sposobów, ale ja po prostu nie mógł znaleźć odpowiednie słowa, aby opisać to. Ruby ma coś takiego, że jeśli chcesz zmienić oryginalną listę, zrobiłbyś coś takiego: li.extend!([5,6,7]) inaczej dałoby to wynik bez mutacji oryginału. Czy to samo istnieje w Pythonie?

Dzięki!

+0

Nie sądzę Python oferuje '! 'lub nie'! 'opcje takie jak Ruby mają specjalnie w swoich metodach Array. Chociaż poniższe odpowiedzi mają alternatywy dla tej ideologii. – squiguy

Odpowiedz

16

Operator w Pythonie + jest przeciążony do łączenia list, tak jak o:

>>> li = [1, 2, 3, 4] 
>>> new_list = li + [5, 6, 7] 
>>> new_list 
[1, 2, 3, 4, 5, 6, 7] 
+0

+1 jeden oczywisty sposób – wim

0

wiem, że to niewygodne, ale to działa:

a = [1,2,3] 
b = list(a) 
b.extend([4,5]) 
+2

'b = a [:]' prawdopodobnie zostałby uznany za lepszy pomysł. –

Powiązane problemy