2016-08-26 6 views
1

Können Sie mir bitte helfen, diese herauszufindenauf max Länge basierend Sortier- und max Summe

q = [[12, 13, 14], [8, 9, 10,11], [2, 3, 4], [5, 6, 7]] 

nehme ich eine Liste wie q haben, Wie sortiere ich die basierend auf

  1. Max Länge von Teil-Listen und
  2. Max Summe der Teil-Listen

sollte die Ausgabe sein:

q = [[8,9,10,11],[12,13,14][5,6,7],[1,2,3]] 

Antwort

5

Versorgung Ihre Kriterien in einer Lambda-Funktion für die key:

sorted(q, key=lambda sub: (len(sub), sum(sub)), reverse=True) 
>>> [[8, 9, 10, 11], [12, 13, 14], [5, 6, 7], [2, 3, 4]] 

Die lambda Funktion jeder Unterliste x nehmen und sortieren sie auf ihr basiert len ist, in Fällen, in denen das Ergebnis len ist nicht ausreichend, um eine Entscheidung zu treffen, die sum ihres Inhalts wird verwendet, um die Krawatte zu brechen.

3

Versuchen:

sorted(q, lambda a,b: len(b)-len(a) or sum(b)-sum(a)) 
+0

@ Jim Es funktioniert in Python 2, aber nicht in Python 3. – acw1668

+0

Ahhh es wird mit 'cmp' in Python 2. ich völlig vergessen hatte, dass, würde ich fordere Sie darauf hinweisen, dass aus, das ist nicht die portabelste Variante ;-). –