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, appendyeni 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 ; myListetkilenmeyecek. Eğer olması gerekiyorsa myListetkilenen sıra birini kullanabilirsiniz .append()neyse, sonra atamak yourList(bir kopyasını) ayrı myList.
list.appendbir 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.appendyerleşiktir ve bu nedenle değiştirilemez. Ancak dışında başka bir şey kullanmak appendistiyorsanı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?