2010-06-29 17 views
5

Çok sayıda öğe için bir jeneratörüm var. Onları bir kerede yinelemek, bir dosyaya vermek istiyorum. Bununla birlikte, şu anda sahip olduğum dosya formatıyla, önce sahip olduğum öğe sayısını çıkarmam gerekiyor. Çok fazla sayıda olduğu ve çok fazla zaman ve hafıza alacağı için, hafızadaki öğelerin listesini oluşturmak istemiyorum. Jeneratör boyunca yinelemenin, uzunluğunun elde edilmesinin bir yolu var mı, ama bir şekilde, daha sonra tekrar tekrar aynı şeyleri elde etmek için, bunu tekrarlamak mümkün mü? Bu sorun için başka ne gibi bir çözüm bulabilirsem?Python: Öğeleri saklamaksızın jeneratördeki öğelerin sayısını alın

cevap

5

Jeneratörü denetleyen parametrelere göre boyutu hesaplamak için yalnızca bir formülün nasıl yazılacağını öğrenirseniz, bunu yapın. Aksi halde, çok zaman tasarrufu sağlayacağını sanmıyorum.

Jeneratörünü buraya ekleyin, biz de sizin için yapmaya çalışacağız!

+0

ah yep i realiezd kısa süre sonra bunu yayınladım =) – Claudiu

5

Bu yapılamaz. Bir jeneratör tükendiğinde, tekrar kullanılmak üzere yeniden yapılandırılmalıdır. Öğe sayısı önceden biliniyorsa __len__() yöntemini bir yineleyici nesnesinde tanımlamak mümkündür ve yineleme nesnesine karşı len() çağrılabilir.

5

Bu, genelleştirilmiş yineleyici için mümkün olduğunu düşünmüyorum. Jeneratörün orijinal olarak nasıl oluşturulduğunu öğrenmeniz ve daha sonra son geçiş için yeniden üretmeniz gerekecektir.

Alternatif olarak, dosyanıza kukla bir boyut yazabilir, öğeleri yazabilir ve ardından dosyayı değiştirerek yeniden açabilir ve üstbilgideki boyutu düzeltebilirsiniz.

Dosyanız ikili bir biçimse, bu boyut oldukça iyi olabilir, çünkü boyut için bayt sayısı gerçek boyutun ne olduğuna bakılmaksızın aynıdır. Metin biçimiyse, tüm büyüklükleri kapsayacak şekilde kukla boyutunu dolduramazsanız, dosyaya fazladan bir uzunluk eklemeniz gerekebilir. Python'u kullanarak bir metin dosyasına ekleme ve yeniden yazma hakkında bir tartışma için bkz. this question.

İlgili konular