2016-06-17 6 views
1

Ich habe eine größere Liste von etwa 250 Elementen. Ich muss alle 50 Elemente in einer Unterliste gruppieren und durch jede der Unterlisten iterieren.Pythonischer Weg, Listen aller N Artikel in einer größeren Liste zurückzugeben

Zum Beispiel:

largerList = [0, 1, ... ..., 268] 

Ich mag die Unterlisten aussehen:

subLists = [[0, 1, ... ..., 49], [50, 51, ... ..., 99], ... ..., [250, 251, ... ..., 268]] 

Dann werde ich in der Lage sein, die Unterlisten zu durchlaufen und für jeden von ihnen etwas tun.

for ls in subLists: 
    for i in ls: 
    DO SOMETHING... 

Antwort

6

können Sie Liste Verständnis verwenden, um dies in einer Pythonic Weise zu tun. Siehe unten:

def group(original_list,n=50): 

    return [original_list[x:x+n] for x in xrange(0,len(original_list),n)] 

Sie brauchen eigentlich keine Funktion für diesen überhaupt, aber ich dachte, die funktionelle Art und Weise zeigen würde, falls Sie die Anzahl der Elemente in jeder Unterliste verändern wollten. Dies funktioniert genauso gut:

[original_list[x:x+50] for x in xrange(0,len(original_list),50)] 
0
count = len(largerList)/50 
i = 0 
smallerList = [] 
while(i < count): 
    smallerList.append(largerList[(i*50):(i*50)+50]) 
    i+= 1 
+0

beschreiben, warum diese Lösung funktioniert hilfreich sein könnten. – gobrewers14

1

Siehe grouper Beispiel in den itertools docs (nicht GROUPBY) - das klingt wie, was Sie wollen:

def grouper(iterable, n, fillvalue=None): 
    "Collect data into fixed-length chunks or blocks" 
    # grouper('ABCDEFG', 3, 'x') --> ABC DEF Gxx" 
    args = [iter(iterable)] * n 
    return zip_longest(*args, fillvalue=fillvalue) 
+0

Guter Ruf auf Grouper für sehr große Listen. Für das, was OP beschreibt, kann das Importieren einer Bibliothek jedoch zu schwer sein. –

Verwandte Themen