2010-07-03 27 views
53

Python'da, bir öğeyi bir listedeki belirli bir dizine nasıl taşıyabilirim? Belirtilen için listede zaten var bir öğeyi taşımak istersenizListedeki bir öğeyi taşıyın mı?

l[index:index] = [item] 

: Bir dilim gösterimi kullanabilirsiniz Alternatif

l = list(...) 
l.insert(index, item) 

:

+0

Olası yinelenen [ Python'da öndeki bir liste öğesini getirmek için basit sözdizimi?] (Https://stackoverflow.com/questions/1014523/simple-syntax-for-bringing-a-list-element-to-the-front-in-python –

cevap

96

listenin insert yöntemi kullanın pozisyonunu silmeniz ve onu yeni pozisyona eklemeniz gerekecek:

l.insert(newindex, l.pop(oldindex)) 
+15

Önceden veya arkaya doğru hareket ediyorsanız, insert/pop yöntemiyle bir listede bulunan bir öğeyi taşımak farklı davranışlara sahip olacaktır. liste. Seçtiğiniz nesne önce eklediğiniz sola hareket ettirin. Seçtiğiniz öğenin arkasına eklediğiniz yere ilerleyin. Listenin sonuna taşınmayı kontrol edin (indeks hatası). – MKaras

+0

Birden çok öğe nasıl taşınır? Bir liste verildiğinde a = [1,2,3,4,5,6,7,8,9], nasıl dönüştürüleceği [1,2, [3,4,5], 6,7,8,9 ]? Bu bir adımda veya liste anlama ile yapılabilir mi? – g33kz0r

+0

@MKaras Bunu Python 3.5 ile test ettim ve hata olmadan "son indeks + 1" e ekleyebilirsin. Öğe bu durumda yalnızca listeye eklenir. – user2061057

17
>>> l = [1,2,3,4,5] 
>>> l += [l.pop(0)] 
>>> l 
[2, 3, 4, 5, 1] 
+3

'l.append (l.pop (0))' işlevini de kullanabilirsiniz. Sadece marjinal olarak daha uzun, ama çok daha okunabilir. – CoreDumpError

+0

@CoreDumpError Evet, aynı şey. '+ =' Sözdizimini '.append()' den çok önce öğrendim, dolayısıyla bunu kullanmam için önyargılarım. – Tim

7

Eğer sen öğenin konumunu bilmiyorsanız: Örneğin

l += [l.pop(0)] 

: Sadece sonuna öğeyi taşırbiraz daha kısa çözüm değil, her yerde bu ilk endeksi bulmak gerekebilir:

old_index = list1.index(item) 

sonra taşıyın:

list1.insert(new_index, list1.pop(old_index)) 

veya IMHO daha temiz bir yoldur:

try: 
    list1.remove(item) 
    list1.insert(new_index, item) 
except ValueError: 
    pass 
1

bir çözüm çok basit ama orijinal konumuna dizinini ve yeni pozisyon dizinini bilmek zorunda: of

list1[index1],list1[index2]=list1[index2],list1[index1] 
+1

Bu bir takas, hareket değil. – juzzlin

İlgili konular