2016-09-20 5 views
-2

Ich versuche, eine Funktion zu schreiben, die alle Nummern in einer Liste hinzufügt, die nicht den Parametern entsprechen. Der Code, den ich habe, der nicht funktioniert, ist:Wie füge ich Nummern in einer Liste hinzu, die nicht die gleichen Parameter haben?

def suminout(nums,a,b): 
    total=0 
    for i in range(len(nums)): 
     if nums[i]!=a or nums[i]!=b: 
      total=total+nums[i] 
    return total 

Es scheint alles in der Liste zu summieren. wenn ich

Zum Beispiel genannt: suminout ([1,2,3,4], 1,2) es 7. jedoch zurückgeben sollte, erhalte ich 10.

Irgendwelche Gedanken?

+5

Sie müssen 'und' statt' or'. Oder einfach 'sum (ich für i in nums, wenn nicht ich in {a, b})' – Kasramvd

+0

@Kasramvd Ich denke, Sie wollten a und b in ein Tupel und kein Diktat setzen. Das fügt einen Syntaxfehler in Ihrem Code hinzu. – euphoria83

+1

@ euphoria83 '{a, b}' ist ein [set] (https://docs.python.org/3.4/library/stdtypes.html#set-types-set-frozenset) –

Antwort

0

Sie müssen and statt or verwenden.

def suminout(nums,a,b): 
    total=0 
    for i in range(len(nums)): 
     if nums[i]!=a and nums[i]!=b: 
      total=total+nums[i] 
    return total 

Ihre for Logik weiter vereinfacht werden könnte (ohne len() und range() zu verwenden) als:

for num in nums: 
    if num not in [a, b]: # same as: num != a and num != b 
     total += num # same as: total = total + num 

besseren Weg, es zu erreichen, mit list comprehension mit sum() wie von Sean erwähnt. OR können Sie filter() statt Liste Verständnis verwenden:

>>> my_list = [1, 2, 3, 4] 
>>> sum(filter(lambda x: x !=1 and x!=4, my_list)) 
5 
1

Wie Kasramvd so ordnungsgemäß festgestellt, brauchen Sie Verbindung nicht disjunktion.

Hier ist ein Listenverständnis, das die gleiche Sache macht.

def suminout(nums, a, b): 
    total = 0 
    total = sum([x for x in nums if (x!=a and x!=b)]) 
    return total 
+1

Sie brauchen nicht 'total = 0 in Ihrem Code –

+0

@MoinuddinQuadri Ich bin mir bewusst. Einfach analog zur OP-Frage machen. – seanmus

+0

Ich glaube nicht, dass es wegen der Aufrechterhaltung der analogen Code ist. Wenn dies der Fall wäre, hätten Sie 'sum()' nicht benutzt und nur auf den Fehler hingewiesen. Ich stimme zu, "sum()" ist der bessere Weg, um dieses Ergebnis zu erreichen. Und wenn Sie das verwenden, ist 'Gesamt = 0 'nicht erforderlich. Das war mein Punkt. –

0

Oder:

def suminout(nums, a, b): 
    total = 0 
    total = sum([x for x in nums if x not in (a,b)]) 
    return total 
Verwandte Themen