2016-05-07 8 views
2

リスト[1,2,3,4]を持っていれば、最初の2つのペアそして、このようにそれらを印刷:リストの最初の2つの要素の合計を取得して最初に挿入する - Python

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

基本的には、それだけで、最初の2つの要素を削除し、リストには、ちょうど1要素を含むまで先頭に合計を挿入し、リストの最初の2つの要素を追加し続ける必要があります。しかし、私は同じことを印刷することができないんだけどちょうどこの取得:

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

をここにそのために私のコードです:

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 

私が何をすべきかに本当に困惑しています。どうもありがとうございました!

+0

なぜそれをしたいですか?最終的に '[10]'を手に入れたいのですか、反復プロセスを経てリストを修正し、その動作を理解するために印刷する必要があるのですか? – AKS

+1

'num_arr'と' numArr'は同じ変数か異なる変数であるべきですか?あなたが名前を修正すれば、コードはあなたの期待どおりに動作するはずです。 – niemmi

答えて

2

あなたができるループリストの長さが1以上であるとslicingを使用しながら:

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

プリント:

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

@niemmiはコメントで言ったように、あなたのコードは、罰金の後に実行されます変数名を修正します。あなたがそれを投稿したやり方では実行されません。

# 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

はい、彼のコードにはいくつかのエラーがあり、あなたが答えたように修正する必要があります。この[**オンラインデモ**](https://repl.it/COQl/0) – SaidbakR

3

だけスライスの交換を使用します。再帰を使用して

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

は別の方法です:

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

再帰的なソリューション:

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:]) 
関連する問題