[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