SORU
29 AĞUSTOS 2012, ÇARŞAMBA


hangi python ile bir dize herhangi bir parametre için daha iyi?

python dize cant değişti beri,işte soru bu.nasıl bir dize daha verimli bir şekilde herhangi bir parametre için?

böyle yazabilirim:

s =stringfromelsewhere

ya da bu gibi:

s = []
s.append(somestring)

later

s = ''.join(s)

bu soruyu yazarken ,bu konu hakkında iyi bir makale konuşuluyor buldum

http://www.skymind.com/~ocrow/python_string/

ama python 2'de.x.çok önemli bir konu hakkında bir python 3'te değişti mi?

CEVAP
29 AĞUSTOS 2012, ÇARŞAMBA


iyistring bir değişken bir dize ekleme yolu = kullanmaktır. Bu okunabilir ve hızlı olmasıdır. Ayrıca, sadece hızlı onlar seçtiğiniz bir zevk meselesi olan, ikinci en yaygın olanıdır. Burada timeit modülü ile zamanlama:

a = a   b:
0.11338996887207031
a  = b:
0.11040496826171875

Ancak, listeler sahip ve onlara ekleme ve daha sonra bu listeleri katılarak, tavsiye edenler listesine bir dize ekleme, muhtemelen çok hızlı bir dize uzanan göre öyle çünkü. Ve bu gerçek, bazı durumlarda olabilir. Örneğin burada olduğunu bir liste için bir dize için, o zaman milyon tek karakterlik bir dize, ilk ekler:

a  = b:
0.10780501365661621
a.append(b):
0.1123361587524414

TAMAM, sonuç dizesi milyon karakter uzunluğunda, ekleme bile hala daha hızlı ortaya çıktı.

Şimdi yüz bin kere bin karakter uzun bir dize ekleme ile çalışın:

a  = b:
0.41823482513427734
a.append(b):
0.010656118392944336

Son dize bu nedenle yaklaşık 100MB uzun olarak biter. Bu oldukça yavaş bir liste çok daha hızlı oldu ekleme oldu. Zamanlama a.join() final dahil değil. Peki bu ne kadar sürer?

a.join(a):
0.43739795684814453

Oops. Bu durumda bile çıkıyor,/join daha yavaş ekleyin.

Bu öneri nereden geliyor? Python 2 mi?

a  = b:
0.165287017822
a.append(b):
0.0132720470428
a.join(a):
0.114929914474

Peki,/join ekleyinmarjinaleğer çok uzun dizeleri genelde mi 100MB hafızasında bir dize ne yapardınız? değil) kullanıyorsanız, daha hızlı var

Ama asıl mühimi Python 2.3. Hatta zamanlamaları göstermek istemiyorum, henüz bitmiş değil çok yavaş olduğu için. Bu testler anidendakika. /Join ekleme hariç, ki o kadar hızlı daha sonra Piton altında.

Evet. Dize birleştirme Python çok yavaş taş devrine geri dönmüştü. Ama 2.4 değil mi artık (ya da en azından Python 2.4.7), bu yüzden öneri için kullanmak eklemek/katılmak oldu eski 2008, Python 2.3 durduruldu güncelleme, ve o, senin durdurdu kullanarak. :-)

(Güncelleme: ben ne zaman çıktı = kullanarak daha hızlı Python 2.3 iki dize için de daha dikkatli bir şekilde test. ''.join() öneriyi bir yanlış anlama) olmalıdır

Ancak, bu CPython. Diğer uygulamalar diğer kaygıları olabilir. Ve bu henüz erken optimizasyon tüm kötülüklerin köküdür neden bir başka nedendir. Sözde bir teknik "hızlı ilk sürece" ölçü olarak kullanma.

""Sürüm dize birleştirme kullanmaktır ya = . en iyi Bu nedenle . Ve eğer bu çok düşük bir olasılıktır senin için yavaş olur, o zaman başka bir şey yapalım.

Neden/Şifremi katılın eklemek çok kullanırım? Bazen aslında daha net çünkü. Özellikle birbirine bağlamak gerektiğini ne boşluk veya virgül veya yeni satır ile ayrılmalıdır.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • A Alkhaldi

    A Alkhaldi

    12 Mayıs 2007
  • dougownsall

    dougownsall

    7 EKİM 2007
  • Paulo Bautista

    Paulo Bautis

    21 Aralık 2008