anlama - "set filtreleme listesi() tuzak"
Makul ortak bir operasyon bir list
list
başka bir süzmek. İnsanlar hızlı bir şekilde bulmak:
[x for x in list_1 if x in list_2]
büyük giriş için yavaş - Ey (*m n). İğrenç. Bu nasıl hızlandırabiliriz? Filtreleme aramaları yapmak için set
O(1) kullanın:
s = set(list_2)
[x for x in list_1 if x in s]
Bu güzel genel olarak O(n) davranış verir. Ben ancak genellikle daha deneyimli kodlayıcılar düşmek bakınTuzak™:
[x for x in list_1 if x in set(list_2)]
Ack! Bu yine O (*m n) python beri oluşturur set(list_2)
herzaman, sadece bir kez değil.
Bu kez hikayenin sonu - python uzak tek set
inşa etmek için optimize edemez sanıyordum. Sadece hatadır farkında olun. Bununla yaşamak zorunda. Hmm.
#python 3.3.2
list_2 = list(range(20)) #small for demonstration purposes
s = set(list_2)
list_1 = list(range(100000))
def f():
return [x for x in list_1 if x in s]
def g():
return [x for x in list_1 if x in set(list_2)]
def h():
return [x for x in list_1 if x in {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19}]
%timeit f()
100 loops, best of 3: 7.31 ms per loop
%timeit g()
10 loops, best of 3: 77.4 ms per loop
%timeit h()
100 loops, best of 3: 6.66 ms per loop
Ha, python (3.3)olabilirbir dizi edebi optimize uzakta. Muhtemelen LOAD_FAST
LOAD_GLOBAL
bir yerini alır, çünkü daha hızlı f()
daha bu durumda.
#python 2.7.5
%timeit h()
10 loops, best of 3: 72.5 ms per loop
Python 2 özellikle bu optimizasyon yapmaz. Daha ne olduğunu araştırmaya çalıştım ama ne yazık ki dis.dis
olamaz anlama ifadeler bağırsaklar prob. Aslında her şey ilginç MAKE_FUNCTION
dönüşür.
Şimdi merak ediyorum - neden 3 python.x kümesi sadece bir kez oluşturmak için hazır optimize uzakta, ama set(list_2)
değil mi?
CEVAP
set(list_2)
optimize etmek amacıyla tercüman list_2
(ve organlarının tümü) yineleme arasında değişmez olduğunu kanıtlaması gerekiyor. Bu genel durum içinde zor bir sorundur ve eğer tercüman bile mücadele etmeyi denemek Eğer bana sürpriz olmaz.
Öte yandan set değişmez bir yineleme arasında değerini değiştirmek, optimizasyon güvenli olduğu bilinmektedir.
Nasıl tamir: Handler " PageHandlerFact...
&; Durağan" quot; C programında ne...
Bu ne anlama geliyor? &;'NSUnknow...
YAY kullanmak için bir proje dönüştürü...
"__Blok " " anahtar kelime ne anl...