Bir listeyi eşit büyüklükte parçalara nasıl bölersiniz?
Elimde rastgele uzunlukta bir liste var ve onu eşit büyüklükte parçalara ayırıp üzerinde işlem yapmam gerekiyor. Bunu yapmanın, bir sayaç ve iki liste tutmak ve ikinci liste dolduğunda, ilk listeye eklemek ve bir sonraki veri turu için ikinci listeyi boşaltmak gibi bazı bariz yolları vardır, ancak bu potansiyel olarak son derece pahalıdır.
Herhangi bir uzunluktaki listeler için iyi bir çözümü olan var mı diye merak ediyordum, örneğin jeneratörler kullanarak.
itertools' içinde yararlı bir şeyler arıyordum ama açıkça yararlı bir şey bulamadım. Yine de kaçırmış olabilirim.
İlgili soru: Bir liste üzerinde yığınlar halinde yinelemenin en "pythonic" yolu nedir?
2047
3
İşte size istediğiniz parçaları üreten bir jeneratör:
Eğer Python 2 kullanıyorsanız,
range()
yerinexrange()
kullanmalısınız:Ayrıca, bir fonksiyon yazmak yerine liste kavramayı da kullanabilirsiniz, ancak kodunuzun daha kolay anlaşılması için bu gibi işlemleri adlandırılmış fonksiyonlarda kapsüllemek iyi bir fikirdir. Python 3:
Python 2 sürümü:
İşte rastgele yinelenebilir dosyalar üzerinde çalışan bir üreteç:
Örnek:
Liste boyutunu biliyorsanız:
Eğer yapmazsanız (bir yineleyici):
İkinci durumda, dizinin her zaman belirli boyutta tam sayıda parça içerdiğinden emin olabilirseniz (yani tamamlanmamış bir son parça yoksa) daha güzel bir şekilde yeniden ifade edilebilir.