Erstplakat hier. Wenn ich eine Liste mit Unterlisten mit verschiedenen Informationen habe und alle Unterlisten mit demselben Schlüsselwert in einer neuen Unterliste gruppieren möchte (z. B. unique-ify eine Liste basierend auf den Schlüsselwerten), was ist der effizienteste Weg? Dies?Der effizienteste Weg, Python-Liste in Unterlisten über Schlüssel zu brechen, während die Reihenfolge beibehalten wird
Beispiel:
A = [[1,2,3], [1,3,7], [2,1,3], [8,9,6], [3,7,9], [2,3,8], [1,2,4]]
Und ich möchte alle Teil-Listen zu gruppieren, die denselben Eintrag in der '0' Index in eine neue sublist, vorzugsweise die ursprüngliche Ordnung zu bewahren:
B = [ [[1,2,3], [1,3,7], [1,2,4]], [[2,1,3],[2,3,8]], [[8,9,6]], [[3,7,9]] ]
I Ich habe dieses Problem schon oft gelöst, aber ich würde gerne sehen, ob es einen effizienteren Weg gibt, dies zu tun. Ja, ich könnte das numpy-Paket aus diesem Grund verwenden, aber ich bin an der Listenlösung interessiert.
Normalerweise würde ich zunächst das Element im ersten Index in jeder Unterliste (mit der Set-Methode, wenn ich nicht um Effizienz oder Ordnung kümmern), dann Schleife über die gesamte Liste, Kombinieren von Unterlisten in eine neue sublist:
def getUniqueList(list):
seen = []
for e in list:
if e not in seen:
seen.append(e)
return seen
def uniquify(list):
# Get all items from the first column
new_list = [item[0] for item in list]
return getUniqueList(new_list)
def rearrangeList(A, A_0):
B = []
for i in range(len(A_0)):
B.append([])
for i in range(len(A)):
index = A_0.index(A[i][0])
B[index].append(A[i])
return B
A = [[1,2,3], [1,3,7], [2,1,3], [8,9,6], [3,7,9], [2,3,8], [1,2,4]]
A_0 = uniquify(A) # Contains all unique keys in index 0 of list A
B = rearrangeList(A, A_0)
print(B)
diese sollte (ich das nicht testen haben, aber das ist, wie ich es wäre Code) führen:
B = [[[1,2,3] , [1,3,7], [1,2,4]], [[2,1,3], [2,3,8]], [[8,9,6]], [[3, 7,9]]]
Ich wollte wissen, ob 1) es einen besseren Weg gibt, dies in Bezug auf Effizienz zu tun, und 2) gibt es eine Möglichkeit, dies in weniger Schritten zu tun (nicht unbedingt effizient, nur neugierig). Hoffentlich wird diese Frage gut gestellt, aber lassen Sie mich wissen, wenn es bearbeitet werden muss!
Die besten Leute, die Verbesserungen am Arbeitscode vorschlagen, verwenden http://codereview.stackexchange.com anstelle von stackoverflow. –
Wenn Sie die Reihenfolge der Gruppen beibehalten, unterscheidet sich diese Frage von dem einfachen Gruppierungsproblem. Beachten Sie, dass das Hinzufügen eines "Sortierten" zu der resultierenden Liste nicht die Sortierung wie in der Frage angefordert erstellt. – topkara
@ TadhgMcDonald-Jensen, danke, ich werde es das nächste Mal versuchen! – rlarson