Seite 1 von 1

"Datenpäckchen" aus Iterator holen

Verfasst: Freitag 16. März 2007, 12:24
von TheGrudge
Hallo,

weiß nicht ob es schon mal gefragt wurde, aber ich habe hier leider nichts passendes gefunden, falls ja tut es mir leid das ich doppelt poste...

Ich habe hier 40 Router in einer Liste stehen, die ich per Telnet neustarten will, um irgendwas zu testen.
Diese Router wählen sich auf einer Gegenstelle ein, die aber nur maximal 25 Verbindungen zulässt. Also brauche ich eine Möglichkeit, immer kleine Päckchen aus der Liste zu erhalten, um diese zu testen.

Setup wie folgt:

Code: Alles auswählen

routers = list(all_routers)
iter_routers = iter(routers)
Würde dann das gerne mit einer Schleife durchlaufen, quasi so:

Code: Alles auswählen

for router in Irgendwas_das_10er_Paeckchen_liefert:
    router.restart()
    # andere Sachen prüfen
Jeder Schleifendurchlauf soll also 10 Router erhalten, die ich dann prüfe, danach die nächsten 10 usw... wie kann ich sowas denn einfach realisieren?

Verfasst: Freitag 16. März 2007, 12:35
von Dill
bau dir doch einfach eine neue liste mit listen von 10 routern:

[routers[i:i+10] for i in range(0,100,10)]

Verfasst: Freitag 16. März 2007, 12:46
von TheGrudge
Oh stimmt das ist ja einfach! Funktioniert super! Danke!! :D

Verfasst: Freitag 16. März 2007, 12:55
von BlackJack
Eine Iterator-Lösung:

Code: Alles auswählen

from itertools import islice


def packets(count, iterable):
    iterator = iter(iterable)
    while True:
        result = list(islice(iterator, count))
        if not result:
            break
        yield result


def main():
    routers = xrange(100)
    for packet in packets(10, routers):
        print '-' * 40
        for router in packet:
            print router

Verfasst: Freitag 16. März 2007, 12:57
von TheGrudge
Habe es nun so gelöst:

Code: Alles auswählen

for location_list in [self.locations[i:i+10] for i in range(0, len(self.locations), 10)]:
    for router in location_list:
        router.restart()
Trotzdem danke, werde ich mir mal merken falls ich das mal brauchen kann.