2016-05-07 10 views
2

Sagen wir, ich habe eine Liste [1,2,3,4], was ich will, ist die Summe der ersten 2 Paare und drucken sie sie auf diese Weise:Die Summe der ersten 2 Elemente in einer Liste erhalten und am Anfang einfügen - Python

[1,2,3,4] 
[3,3,4] 
[6,4] 
[10] 

Grundsätzlich sollte es einfach weiter auf das Hinzufügen der ersten 2 Elemente der Liste dann die ersten zwei Elemente löschen und die Summe am Anfang einfügen, bis die Liste nur 1 Element enthält. Allerdings bin ich nicht in der Lage, das gleiche zu drucken, aber nur diese:

[1,2,3,4] 
[3,3,4] 
[3,4] 
[3] 

Hier mein Code ist für das:

counter = len(num_arr) 

while (counter > 1): 
    valHold = (sum(num_arr[:2])) 
    del numArr[:2] 
    numArr.reverse() 
    numArr.append(valHold) 
    numArr.reverse() 
    print (numArr) 
    counter -= 1 

Ich bin wirklich verwirrt, was zu tun. Vielen Dank!

+0

Warum möchten Sie das tun? Willst du endlich "[10]" oder ist es eine Aufgabe, bei der du den iterativen Prozess durchlaufen musst, die Liste modifizierst und sie druckst, um ihr Verhalten zu verstehen? – AKS

+1

Sollen 'num_arr' und' numArr' gleich oder verschieden sein? Wenn Sie den Namen korrigieren, sollte sich der Code so verhalten, wie Sie es erwarten ... – niemmi

Antwort

2

Sie können Schleife, während die Länge der Liste mehr als 1 ist und verwenden slicing:

l = [1, 2, 3, 4] 
while len(l) > 1: 
    l = [l[0] + l[1]] + l[2:] 
    print(l) 

Drucke:

[3, 3, 4] 
[6, 4] 
[10] 
2

Wie @niemmi in den Kommentaren gesagt, läuft Ihr Code gut nach Sie beheben die Variablennamen. Es läuft nicht so wie du es geschrieben hast.

# test.py 

num_arr = [1, 2, 3, 4] 
print(num_arr) 

counter = len(num_arr) 

while (counter > 1): 
    valHold = (sum(num_arr[:2])) 
    del num_arr[:2] 
    num_arr.reverse() 
    num_arr.append(valHold) 
    num_arr.reverse() 
    print (num_arr) 
    counter -= 1 

$ python test.py 
[1, 2, 3, 4] 
[3, 3, 4] 
[6, 4] 
[10] 
+0

Ja, sein Code hat einige Fehler und sollte behoben werden, wie Sie geantwortet haben. Diese [** Online-Demo **] (https://repl.it/COQl/0) – SaidbakR

3

Verwenden Sie einfach Scheibe Ersatz:

num_arr = [1,2,3,4] 
while len(num_arr) >= 2: 
    num_arr[:2] = [sum(num_arr[:2])] 
    print(num_arr) 
0

rekursive Verwendung ist eine andere Art und Weise:

l = [1,2,3,4] 

def func(l): 
    print(l) 
    if len(l)==1: 
     return True 
    new_l = [l[0]+l[1]] 
    new_l.extend(l[2:]) 
    return func(new_l) 

func(l) 
0
a=[1,2,3,4] 
counter = len(a) 
while (counter > 1): 
    valHold = (sum(a[:2])) 
    del a[:2] 
    a.insert(0,valHold) 
    print a 
    counter = counter - 1 
0

rekursive Lösung:

l = [1,2,3,4] 
def f(l): 
    print(l) 
    if len(l) < 2: 
     return l 
    return f([sum(l[:2])] + l[2:]) 
0
l=[1,2,3,4] 
cumsum = 0 
for i in range(len(l)): 
    cumsum += l[i] 
    print([cumsum]+l[i+1:]) 
Verwandte Themen