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ş:
Nasıl baskı yeni satır veya boşluk olm...
Neden Python karşılaştırma dizeleri ku...
X None` x Hiçbiri değildir `veya`Pytho...
Nasıl python kabuk OS X 32 bit veya 64...
Python: sınıf baskı kullanarak bir sın...