SORU
22 Kasım 2008, CUMARTESİ


Python - başlangıç kapasitesi ile bir liste Oluşturmak

Bu kodu sık sık olur:

l = []
while foo:
    #baz
    l.append(bar)
    #qux

Bu liste sürekli yeni unsurlar uyacak şekilde yeniden boyutlandırılabilir olacak gibi listenize öğeleri binlerce eklemek üzeresin Eğer gerçekten yavaş.

Java, başlangıç kapasitesine sahip bir ArrayList oluşturabilirsiniz. Eğer listenizi nasıl olacağı hakkında bir fikriniz varsa, bu çok daha verimli olacaktır.

Bu kodu sık sık re-çarpanlarına liste bir anlama içine olabildiğini anlıyorum. Döngü çok karmaşık olsa/olsa da, bu olanaksız. Bize Python programcıları için herhangi bir eşdeğer var mı?

CEVAP
22 Kasım 2008, CUMARTESİ


def doAppend( size=10000 ):
    result = []
    for i in range(size):
        message= "some unique object %d" % ( i, )
        result.append(message)
    return result

def doAllocate( size=10000 ):
    result=size*[None]
    for i in range(size):
        message= "some unique object %d" % ( i, )
        result[i]= message
    return result

Sonuçları. (her 144 kez fonksiyon ve süresi ortalama değerlendirmek)

simple append 0.0102
pre-allocate  0.0098

Sonuç. Zar zor konular.

Prematüre optimizasyonu tüm kötülüklerin köküdür.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Canceriansoul

    Canceriansou

    15 Ocak 2011
  • CasinoRoyaleMovie's channel

    CasinoRoyale

    1 AĞUSTOS 2006
  • Kayla Caton - Peet

    Kayla Caton

    23 HAZİRAN 2012