2016-04-18 3 views
0

I Liste der Liste haben alsVergleich Einheiten der Liste von Listen und erhalten die indexess für Listen mit mehr als zwei ähnlichen Identitäten

Eingang folgt:

[(21, 5, 4, 3), (21, 4, 1, 2), (21, 5, 1), (22, 8, 4, 2), (22, 4, 6, 7), (22, 8, 6)] 

Jede Liste in der Liste hat immer nur ganze Zahlen . Ich möchte die Listen finden, in denen mindestens zwei Einträge identisch sind, und dann die Indizes dieser Liste speichern und drucken.

Output:

0 0 1 
1 0 2 
2 1 2 
3 1 3 
4 3 4 
5 3 5 
6 4 5 

erste Spalte der Ausgabe in dem Index der Anzahl der gefundenen Paaren. Die zweite Spalte zeigt den Index der Listen mit 2 oder mehr als 2 ähnlichen Entitäten. Wenn ich eine Liste der Liste bekommen kann, wo ich Zugang zu jedem Element wie Liste [0] [0] haben würde geben 0 (erstes Paar) und Liste [0] [1] würde die erste Entität des ersten Paares und Liste geben [0] [2] würde die 2. Entität des 1. Paares und so weiter geben. Es wäre noch besser, damit ich es nach meinen Anforderungen analysieren kann.

Parsen und Drucken wäre kein Problem.

Grüße

+1

Bitte geben Sie die Ausgabe explaination – kvivek

+2

Sollte nicht die letzte Zeile im Ergebnis '6 4 5' sein, da es nur 6 Tupel gibt? – niemmi

+0

@niemmi, Sie haben Recht. Mein Fehler. Genau aus diesem Grund möchte ich das automatisieren :( –

Antwort

2

Sie die Tupel Sätze umwandeln könnte und gehen Sie wie folgt:

d = [(21, 5, 4, 3), (21, 4, 1, 2), (21, 5, 1), (22, 8, 4, 2), (22, 4, 6, 7), (22, 8, 6)] 
d = [set(l) for l in d] 
index = 0 
res = [] 

for i in xrange(len(d) - 1): 
    for j in xrange(i + 1, len(d)): 
     if len(d[i] & d[j]) >= 2: 
      res.append([index, i, j]) 
      index += 1 

print res # [[0, 0, 1], [1, 0, 2], [2, 1, 2], [3, 1, 3], [4, 3, 4], [5, 3, 5], [6, 4, 5]] 

Dies funktioniert für 2.x Python, für 3.x Sie stattdessen range statt xrange und print Funktion verwenden sollten der Aussage.

Verwandte Themen