2011-09-11 19 views
18

Listenin bir versiyonunu uygulamak için en pythonic yöntemi arıyorum extend fonksiyonunun sonuna, verilen bir indise sonuna kadar uzanır. liste.liste endekse() endekse eklemek için sadece liste elemanlarını eklemek değil

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

Bunun gibi yeni bir liste oluşturmadan bunu yapmanın bir yolu var mı?

Bu yaklaşım aslında çok da kötü değil, ancak daha iyi bir önsezim var. Olabilir mi?

+2

Yeni bir liste oluşturmayla ilgili bir sorun yok, ancak neden adımlar halinde yapıyorsunuz? Bundan daha basit: 'c_list = a_list [: 1] + b_list + a_list [1:]'. –

+0

Bilmiyorum + listeler için aşırı yüklendi. – mwcz

+0

Aynı şeye ihtiyacım vardı ama bunun yerine, “insert” in indekste “açılmamış” liste elemanlarını “genişlet” gibi ekleyerek davranmasını sağlamanın bir yolu için sormak istiyorum… cevap aynı olurdu : -D – danicotra

cevap

41

Tabii, dilim indeksleme kullanabilirsiniz: Eğer varsayımsal bir özel list sınıfta my_extend işlevi uygulamak olsaydı

a_list[1:1] = b_list 

Sadece genel algoritma göstermek için, bu şekilde görünecektir:

Ama aslında bir işlev yapmazsanız, yalnızca gerektiğinde dilim gösterimini kullanın.

+0

Hah, bunu biliyordum! Bunu denemeyi hiç düşünmemiştim; Sadece 'b_list'in tümünün' b_list 'öğelerinden ziyade, dizin 1'de' a_list 'içine yerleştireceğini varsaydım. Dilimlemenin inceliklerini gözden geçirmem gerekiyor. Çok teşekkürler. – mwcz

+2

Bu çözümü sevdiğim halde, Python prensiplerine karşı hafifçe giderim, çünkü ne olacağı hemen belli değil (sizin hatanız). Bunun yerine uzatmak için isteğe bağlı argüman olsaydı ... – Stan

+2

Ben dunno, ben notasyon dilimlemek için alıştıktan sonra yeterince açık olduğunu düşünüyorum. Umarım 'the_list [i: j] = other_list'' i ('' the_list [5: 3] = other_list' gibi) davası hakkında konuşuyor olsaydık, kesinlikle ne olması gerektiği konusunda sezgisel olmadığını kesinlikle kabul ediyorum, ama bu sözdizimini sanmıyorum Yine de çalışıyor. –

İlgili konular