SORU
25 Temmuz 2011, PAZARTESİ


Rolling veya Python pencere yineleyici sürgülü

Sıra/yineleyici/jeneratör (aka pencere sürgülü) rolling pencere iterable ihtiyacım var. Varsayılan Python yineleme pencere uzunluğu 1 olduğu özel bir durum olarak kabul edilebilir. Şu anda aşağıdaki kodu kullanıyorum. Herkes bunu yapmak için daha Pythonic, daha ayrıntılı ya da daha etkili bir yöntem var mı?

def rolling_window(seq, window_size):
    it = iter(seq)
    win = [it.next() for cnt in xrange(window_size)] # First window
    yield win
    for e in it: # Subsequent windows
        win[:-1] = win[1:]
        win[-1] = e
        yield win

if __name__=="__main__":
    for w in rolling_window(xrange(6), 3):
        print w

"""Example output:

   [0, 1, 2]
   [1, 2, 3]
   [2, 3, 4]
   [3, 4, 5]
"""

CEVAP
25 Temmuz 2011, PAZARTESİ


itertools examples Python belgeleri eski bir versiyonunu bir tane var:

from itertools import islice

def window(seq, n=2):
    "Returns a sliding window (of width n) over data from the iterable"
    "   s -> (s0,s1,...s[n-1]), (s1,s2,...,sn), ...                   "
    it = iter(seq)
    result = tuple(islice(it, n))
    if len(result) == n:
        yield result    
    for elem in it:
        result = result[1:]   (elem,)
        yield result

Doktorlar dan biraz daha kısa ve sanırım daha etkili biçimde itertools kullanır.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • GUN-TIME with Brandon

    GUN-TIME wit

    3 ŞUBAT 2009
  • Mark Halberstadt

    Mark Halbers

    19 ŞUBAT 2010
  • Mr. H

    Mr. H

    1 Temmuz 2012