2014-04-20 13 views
5

Sto cercando di trovare un modo per trovare/sostituire elementi da una lista diversa dall'uso dell'iterazione, come c'è una funzione splice() in perl.Esiste una funzione integrata come la giunzione di Perl in Python?

@a = splice(@list,2,3,(1,1,1)); 
print @a; 

In python è necessario eseguire il ciclo e trovare e sostituire. Questo richiede un po 'di tempo. Quindi c'è un modo per sostituire come facciamo in Perl?

risposta

6

È possibile utilizzare l'assegnazione fetta:

somelist[2:5] = [1, 1, 1] 

Questo prende gli elementi 2, 3 e 4, la loro sostituzione con il nuovo elenco. Il nuovo elenco non deve essere della stessa lunghezza o può essere vuoto. Anche la porzione che assegni può essere di lunghezza 0, inserendo efficacemente la sequenza di destra nella lista di destinazione.

Demo:

>>> a = [1, 2, 3] 
>>> a[1:1] = [4, 5, 6] 
>>> a 
[1, 4, 5, 6, 2, 3] 
>>> b = ['foo', 'bar', 'baz', 'spam', 'ham', 'eggs'] 
>>> b[2:5] = [1, 1, 1] 
>>> b 
['foo', 'bar', 1, 1, 1, 'eggs'] 
>>> c = [42, 38, 22] 
>>> c[:2] = [] 
>>> c 
[22] 

assegnazione Fetta copre tutti gli stessi casi d'uso i Perl splice() function supporti.

+0

Grazie, E 'quello che stavo cercando. – user3518094

+0

Un modo per inserire l'elenco di destra nella mano sinistra senza rimuovere alcun elemento dalla mano sinistra? – Hubro

+0

@Hubro: certo, basta scegliere due indici * tra * gli elementi; 'somelist [1: 1] = iterable' verrebbe inserito dopo' somelist [1] ', prima di' somelist [2] '. –

Problemi correlati