Bunun gibi bir şey yapmak istiyorum:
myList = [10, 20, 30]
yourList = myList.append(40)
Ne yazık ki, liste eki değiştirilen listeyi döndürmez.
Peki, append
yeni listeye geri dönmeme nasıl izin verebilirim ?
Yanıtlar:
Ekleme yerine birleştirme kullanmayın:
yourList = myList + [40]
Bu yeni bir liste döndürür ; myList
etkilenmeyecek. Eğer olması gerekiyorsa myList
etkilenen sıra birini kullanabilirsiniz .append()
neyse, sonra atamak yourList
(bir kopyasını) ayrı myList
.
list.append
bir komuttur, sorgu değil.
Python 3'te eskisini açıp yeni eleman ekleyerek yeni liste oluşturabilirsiniz:
a = [1,2,3]
b = [*a,4] # b = [1,2,3,4]
ne zaman yaparsan:
myList + [40]
Aslında 3 listeniz var.
list.append
yerleşiktir ve bu nedenle değiştirilemez. Ancak dışında başka bir şey kullanmak append
istiyorsanız, deneyebilirsiniz +
:
In [106]: myList = [10,20,30]
In [107]: yourList = myList + [40]
In [108]: print myList
[10, 20, 30]
In [109]: print yourList
[10, 20, 30, 40]
Elbette bunun dezavantajı, bundan çok daha fazla zaman alan yeni bir listenin oluşturulmasıdır. append
Bu yardımcı olur umarım
Yerleşik liste türünü alt sınıflandırabilir ve 'ekleme' yöntemini yeniden tanımlayabilirsiniz. Daha da iyisi, yapmasını istediğiniz şeyi yapacak yeni bir tane oluşturun. Aşağıda, yeniden tanımlanmış bir 'ekleme' yönteminin kodu verilmiştir.
#!/usr/bin/env python
class MyList(list):
def append(self, element):
return MyList(self + [element])
def main():
l = MyList()
l1 = l.append(1)
l2 = l1.append(2)
l3 = l2.append(3)
print "Original list: %s, type %s" % (l, l.__class__.__name__)
print "List 1: %s, type %s" % (l1, l1.__class__.__name__)
print "List 2: %s, type %s" % (l2, l2.__class__.__name__)
print "List 3: %s, type %s" % (l3, l3.__class__.__name__)
if __name__ == '__main__':
main()
Umarım yardımcı olur.
Kullanmayı deneyin itertools.chain(myList, [40])
. Bu, yeni bir liste tahsis etmek yerine bir jeneratörü bir dizi olarak döndürecektir. Esasen, ilk yinelenebilir öğeden tükenene kadar tüm öğeleri döndürür, ardından tüm yinelenebilir öğeler tükenene kadar sonraki yinelenebilir duruma geçer.
Storstamp'ın cevabını genişletmek için
Sadece myList.append (40) yapmanız gerekir
Orijinal listeye ekleyecek, şimdi orijinal listeyi içeren değişkeni döndürebilirsiniz.
Çok büyük listelerle çalışıyorsanız, gidilecek yol budur.
append()
geri dönmenin ardındaki mantık ne olabilirdiNone
? Hangi zen ilkesini ihlal ederdi?