SORU
26 Mart 2012, PAZARTESİ


kriterlere uyan ilk liste öğesi bul

\Belirli bir ölçüte uyan ilk liste öğesi dönen bulma en zarif ve etkili yolu ne olurdu?

Eğer nesnelerin bir listesi var, örneğin, ve öznitelik obj.val==5 Bu ilk nesneyi almak istiyorum. Elbette liste üreteci kullanabilirim, ama bu O(n) tabi ki eğer n büyükse, ziyan olmasın. Aynı zamanda kriterleri yerine bir zamanlar break ile bir döngü kullanabilirim, ama daha pythonic\zarif bir çözüm olabilir diye düşündüm.

CEVAP
26 Mart 2012, PAZARTESİ


Eğer başka bir dizin veya nesneler için sıralanmış bilgi yok eğer doğru değilse, o zaman böyle bir nesne bulununcaya kadar yinelemek gerekir:

next(obj for obj in objs if obj.val==5)

Bu ancak daha hızlı tam listesi bir anlama daha. Bu iki karşılaştırmak:

[i for i in xrange(100000) if i == 1000][0]

next(i for i in xrange(100000) if i == 1000)

İlk 5.75 ms ihtiyacı, ikinci bir 58.3 us (döngü 100 kat daha kısa çünkü 100 kat daha hızlı).

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • 0TACTICAL0HIPPY0

    0TACTICAL0HI

    30 EYLÜL 2012
  • Kevin Bruckert

    Kevin Brucke

    30 Aralık 2006
  • LivestrongWoman

    LivestrongWo

    1 Aralık 2011