2017-02-25 5 views
-2

Angenommen, ich habe eine verschachtelte Liste, die wie folgt aussieht:Python: Mögliche Kombinationen für Elemente in einer Liste von Listen

nested_list = [[a,b,1],[c,d,3],[a,f,8],[a,c,5]] 

Jetzt mag ich zwischen dem zweiten Artikel der Listen alle möglichen Kombinationen bekommen, aber nur wenn die ersten Elemente in beiden Listen gleich sind. Also, was gedruckt werden soll, ist der folgende:

Combinations for 'a' as first item in the lists: [b,f], [b,c], [f,c] 

ich kam mit diesem:

comprehension = [x[0] for x in nested_list if x[1] in nested_list] 

Aber das funktioniert nicht (natürlich). Ich bin mir nicht sicher, wie ich alle Listen durchlaufen soll, um die Kombinationen zu finden.

+0

Es sieht aus wie Sie uns für Sie einen Code schreiben möchten. Während viele Benutzer bereit sind, Code für einen in Not geratenen Coder zu produzieren, helfen sie normalerweise nur, wenn das Poster bereits versucht hat, das Problem selbst zu lösen. Eine gute Möglichkeit, diesen Aufwand zu demonstrieren, besteht darin, den Code, den Sie bisher geschrieben haben, die Beispieleingabe (falls vorhanden), die erwartete Ausgabe und die Ausgabe, die Sie tatsächlich erhalten (Ausgabe, Rückverfolgung usw.), einzubeziehen. Je mehr Details Sie angeben, desto mehr Antworten erhalten Sie wahrscheinlich. Überprüfen Sie die [FAQ] (http://stackoverflow.com/tour) und [Wie zu fragen] (http://stackoverflow.com/questions/how-to-ask). – TigerhawkT3

Antwort

0

können Sie verwenden collectoins.defaultdict und combinations:

In [2]: nested_list = [['a','b',1],['c','d',3],['a','f',8],['a','c',5]] 

In [3]: from collections import defaultdict 

In [4]: from itertools import combinations 

In [5]: d = defaultdict(list)  

In [6]: for i, j, _ in nested_list: 
    ...:  d[i].append(j) 
    ...:  

In [7]: {k: list(combinations(v, 2)) for k, v in d.items()} 
Out[7]: {'a': [('b', 'f'), ('b', 'c'), ('f', 'c')], 'c': []} 
Verwandte Themen