[python-nl] Venster over een lijst schuiven
Rob Hooft
rob at hooft.net
Sun Oct 17 17:01:23 CEST 2010
Op 17 oktober 2010 16:37 heeft Geert Stappers <stappers at stappers.nl>
het volgende geschreven:
> Op 20101017 om 15:12 schreef Thomas Miedema:
>> 2010/10/17 Wouter van Heyst <larstiq at larstiq.dyndns.org>
>> > On Sun, Oct 17, 2010 at 14:41:38 +0200, Geert Stappers wrote:
>> > > Op 20101017 om 13:35 schreef Dirkjan Ochtman:
>> > > > 2010/10/17 Geert Stappers <stappers at stappers.nl>:
>> > > > > Misschien zit het al in Python en weet ik niet hoe het heet.
>> > > > >
>> > > > > Wat is de Python naam van "breed venster over lijst schuiven"?
>> > > >
>> > > > itertools!
>> > > >
>> > > > http://docs.python.org/library/itertools.html
>> > >
>> > > Wie wil er wat meer over vertellen?
>> >
>> > De voorbeelden in de documentatie herbergen een sliding window
>> > implementatie, die kan je zo overnemen?
>
> Nou, ik denk dat de documentie voorbeelden verbergt ;-)
> Althans, het voorbeeld met 'take' krijg ik niet aan de praat.
>
> De discussie heeft me ondertussen wel keywords opgeleverd
> die ik aan Google kon voeren.
>
> python sliding window iterator
>
> En nu heb ik het warme gevoel
> dat ik niet alleen was met mijn probleem :-)
>
>> for i in range(len(lijst) - 3):
>> print lijst[i:i+3]
>
>
> Niet zo Pythontic als ik wilde, maar wel waar ik mee verder ga.
En zo?
class Window(object):
def __init__(self, n):
self.n = n
def __call__(self, list):
ret = []
for i in list:
if len(ret) == self.n:
yield ret
ret = ret[1:]
ret.append(i)
if len(ret) == self.n:
yield ret
lijst = [1, 2, 3, 3, 4, 10 , 3 ,2, 2, 1]
w=Window(3)
for three in w(lijst):
print three
--
Rob W. W. Hooft || rob at hooft.net || http://hooft.net/rob
More information about the Python-nl
mailing list