2017-04-23 3 views
0

Mit einer Liste von Sätzen, hätte ich gerne eine Liste, die die Schnittmenge zwischen dem ersten Satz mit dem zweiten, dem zweiten mit dem dritten und so weiter hat. Zum Beispiel:Python paarweise Kreuzung in der Liste

list_of_sets=[set([1,2,3,4,5]),set([1,2,3,5]),set([4,5,6]) 
meine_liste_len=len(list_of_sets) 
pairwise_intersection_list=[] 
for x in range(0,meine_liste_len-1): 
    for y in range(1,meine_liste_len): 
     pairwise_intersection_list.append(set x.intersection(set(y))) 

würde Ich mag

pairwise_intersection_list=set(([1,2,3]),([5])) 

als Ergebnis haben.

Die erste Antwort ist eine wirklich gute, die keinen Import eines Moduls erfordert. Eine andere (die zip verwendet) wäre:

 pairwiseintersect_list=([i.intersection(j) for i,j inzip(list_of_sets,list_of_sets[1:]) 
+0

Was schief gelaufen? – tdelaney

+0

Sie möchten, dass das Endergebnis ein einzelner Satz mit mehreren Listen ist? Listen sind nicht hashbar, das wird also nicht funktionieren. – tdelaney

+0

Sie können ein laufendes Beispiel veröffentlichen (oder so nah wie möglich). Zum Beispiel existiert 'meine_liste_len' nicht. Wenn ich eine Lösung posten möchte, muss ich herausfinden, was diese Variablen sind und sie hinzufügen. Sie sollten das für uns tun. – tdelaney

Antwort

0

Sie range(0, len(list_of_sets) - 1) verwenden können, um den Index aller aber das letzte Mitglied der Liste zu bekommen. Dann sind zwei benachbarte Mengen nur Index und Index + 1. Verwenden Sie das mit einer Liste Verständnis und Sie erhalten

>>> list_of_sets=[set([1,2,3,4,5]),set([1,2,3,5]),set([4,5,6])] 
>>> new_list = [list_of_sets[i] & list_of_sets[i+1] for i in range(0, len(list_of_sets)-1)] 
>>> new_list 
[{1, 2, 3, 5}, {5}] 
+0

Vielen Dank! Ich wusste nicht einmal, dass man "&" in einer Funktion verwenden könnte. –

Verwandte Themen