2017-06-12 4 views
-1

Der Code unten ist für den ersten drei Elemente des Tupels dieser Liste ausgeführterhalten die Anzahl der Elemente von Tupeln der eigenen ... nicht nur den Bereich oder die Sequenz

SS1=[(1, 2, 3, 4, 5), (1, 2, 3, 4, 6), (1, 2, 3, 5, 6), (1, 2, 4, 5, 6), (1, 3, 4, 5, 6), (2, 3, 4, 5, 6)] 

from collections import Counter 
c = Counter(elem[0:3] for elem in SS1) 

for k, v in c.items(): 
    if (v > 0): 
     print(k,v) 

und der Ausgang ist:

(1, 2, 3) 3 
(1, 2, 4) 1 
(1, 3, 4) 1 
(2, 3, 4) 1 

Aber meine Erwartung ist nicht nur für den ersten drei Tupel ... möchte ich den Zähler für Tupel (0,2,3) oder Tupel (1,2,4) ebenfalls kann ich drei beliebige Position des Tupels übergeben und die Anzahl der es bekommen ... Wie kann Ich mache das?

+0

entfernen Sie den '[0: 3]'? –

+1

Woher kommt '(0,2,3)'? Es gibt keine '0' in' SS1' –

+0

Muss dieses Tupel zusammenhängend in der Tupel-Liste existieren? –

Antwort

1

Wenn das, was ich von Ihrer Frage verstanden richtig ist, wird der folgende Code das Problem lösen:

SS1=[(1, 2, 3, 4, 5), (1, 2, 3, 4, 6), (1, 2, 3, 5, 6), (1, 2, 4, 5, 6), (1, 3, 4, 5, 6), (2, 3, 4, 5, 6)] 

from collections import Counter 

def get_new_list(a, pos): 
    # Check if any element in pos is > than the length of the tuples 
    if any(k >= len(min(SS1, key=lambda x: len(x))) for k in pos): 
     return 

    for k in a: 
     yield tuple(k[j] for j in pos) 

def elm_counter(elm): 
    if not len(elm): 
     return 

    c = Counter(elm) 
    for k, v in c.items(): 
     if v > 0: 
      print(k, v) 

elm = list(get_new_list(SS1, (0, 2, 4))) 
elm_counter(elm) 
print('---') 
elm = list(get_new_list(SS1, (1, 2, 4))) 
elm_counter(elm) 

Ausgang:

(1, 3, 5) 1 
(1, 3, 6) 2 
(1, 4, 6) 2 
(2, 4, 6) 1 
--- 
(2, 3, 6) 2 
(2, 3, 5) 1 
(3, 4, 6) 2 
(2, 4, 6) 1 
+1

Wow ... was für eine tolle Lösung und U r der MAN und mach heute meinen Tag !!! Vielen Dank für so eine großartige Hilfe und es ist meine erste Frage und ich war buchstäblich glücklich mit der Lösung, die Sie zur Verfügung stellen und Vielen Dank, Bruder. Vielen Dank nochmal. –

+0

Gern geschehen. Wenn meine Lösung Ihre Bedürfnisse erfüllt, können Sie sie aktualisieren und akzeptieren (klicken Sie auf das grüne Kästchen unter den Antworten). –

+1

Yep ... Gerade fertig und ich wusste nicht einmal, wie ich die Credits an dich weitergeben soll hier ist es meine allererste Frage mit Stack ... ich sende eine Email auch an dich bitte in Kontakt Ich brauche deine Hilfe in der Zukunft auch ... Vielen Dank !!! U R absolut großartig. –

Verwandte Themen