"Datenpäckchen" aus Iterator holen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Benutzeravatar
TheGrudge
User
Beiträge: 96
Registriert: Donnerstag 4. Mai 2006, 18:39

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?
Benutzeravatar
Dill
User
Beiträge: 470
Registriert: Mittwoch 10. Januar 2007, 14:52
Wohnort: Köln

bau dir doch einfach eine neue liste mit listen von 10 routern:

[routers[i:i+10] for i in range(0,100,10)]
Benutzeravatar
TheGrudge
User
Beiträge: 96
Registriert: Donnerstag 4. Mai 2006, 18:39

Oh stimmt das ist ja einfach! Funktioniert super! Danke!! :D
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
Benutzeravatar
TheGrudge
User
Beiträge: 96
Registriert: Donnerstag 4. Mai 2006, 18:39

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.
Antworten