2016-12-10 5 views
0

Ich bin derzeit auf eine Frage bezüglich Listen und Formelcodes stecken. Ich muss Zum Beispiel, wenn list = [4,6] würde ich 2. (4 + 6) und (6 + 4) zurückgeben. Dieser Code muss für jede Länge der Liste funktionieren und keine zwei Zahlen sind in der Liste identisch. Ich bin neu in Listen und steckte darauf, wie man mit dem Programmieren beginnt.Zähler für eine Liste von bis zu 10

def countsum(list): 

Würde schätzen die Hilfe

Antwort

0
def count_list_aux(num_possibilities, a_list, i, j): 
    if i == j: # Only 1 item to check now. 
      if a_list[i] == 10: # The item itself is 10 so that can be a combo. 
        return num_possibilities + 1 
      else: # Otherwise we are done. 
        return num_possibilities 

    else: 
      combo = a_list[i] + a_list[j] 
      if combo == 10: # (4,6) for instance. 
        return count_list_aux(num_possibilities+2, a_list, i+1, j-1) 
      elif combo > 10: # (4,8) for instance. Clearly 8 needs to go when we have a sorted list. 
        return count_list_aux(num_possibilities, a_list, i, j-1) 
      else: # (4,7) for instance. Clearly 4 needs to go when we have a sorted list. 
        return count_list_aux(num_possibilities, a_list, i+1, j) 

def countsum(a_list): 
     a_list = sorted(a_list) 
     return count_list_aux(0, a_list, 0, len(a_list)-1) 

print(countsum([4,6,3,7,5,2,8])) 

ich eine rekursive Lösung gemacht haben, wo ich einfach die Liste sortieren (aufsteigende Reihenfolge) und dann rekursiv addieren sich am weitesten links stehende (i) und am weitesten rechts stehende (j) und prüfen, ob sie zu 10 addieren. Wenn sie das tun, dann inkrementiere ich num_possibiltiies um 2 (zB 6,4 und 4,6 sind 2 Combos). Wenn die Summe größer als 10 ist, dekrementiere ich um 1, da der aktuelle Index j nicht mit anderen Werten in der Liste arbeiten kann (Liste ist sortiert). Ähnlich, wenn die Summe kleiner als 10 ist, inkrementiere ich i um 1, da der aktuelle Index i nicht mit anderen Werten arbeiten kann, um eine Summe von 10 zu erhalten (es ist mit dem größten Wert am Index j gescheitert).

+0

Würde dies für Listen funktionieren, die mehr als eine Länge von 2 haben? – Jessica

+0

Ja, ich habe es ausprobiert. –

+0

Wenn Sie nicht sicher sind, können Sie meinen Code testen. Der obige Code testet auf "[4,6,3,7,5,2,8]" und gibt 6 aus, wie wir (4,6), (6,4), (3,7), (7 , 3), (2,8), (8,2). Wenn Sie diese Antwort nützlich finden, wäre es sehr hilfreich, wenn Sie das "Häkchen" neben meiner Antwort drücken. Auf diese Weise wissen zukünftige Benutzer, dass dies eine funktionierende Lösung für Ihr Problem ist. –

0

Die Funktion kann auch implementiert werden:

from itertools import combinations 
from math import factorial 

def countsum(L): 
    x = 10 
    n = 2 
    return sum(factorial(n) for c in combinations(L, n) if sum(c) == x) 

Die Fakultät ist, weil Kombinationen Tupeln, die Mengen von Elementen erzeugt, anstatt jede der Permutationen zählen, einfach ihre Zählung berechnen. Da der Faktor von einer Konstante abhängt, kann er angehoben werden:

def countsum(L): 
    x = 10 
    n = 2 
    return factorial(n) * sum(1 for c in combinations(L, n) if sum(c) == x) 
Verwandte Themen