2016-03-28 13 views
1

リストの値を3つ右にシフトするコードを実行しようとしています。例えば、私はリスト[1,2,3、-3,15,6,71,42]を持っており、出力をしたいと思っています[-3,15,6,71,42,1,2,3]現在のプログラムの出力は[-3,15,6,71,42,8,8,8]です。私はエラーを見つけることができませんが、教授は私がのコードをの1行に変更してエラーを修正したいと考えています。だから、エラーは見つけにくいとは限りません。私はそれを見つけることができないことを除いて:Dリスト内の要素を移動する(Python)

助けてください!

def foo1(values): 
 
    return values[0] 
 

 
def foo2(values):   
 
    for i in range(1,len(values)): 
 
     values[i-1] = values[i] 
 
     
 
def foo3(values,c): 
 
     values[len(values)-c] = len(values) 
 
    
 
def main(): 
 
    values = [1,2,3,-3,15,6,71,42] 
 
    k = 3 
 
    for r in range(k): 
 
     a = foo1(values)  
 
     foo2(values) 
 
     foo3(values,a) 
 
     
 
     
 
     
 
     
 
    print("Here is the shifted list to the left for " + str(k) + " time:") 
 
    print(values) 
 

 
    
 
main()

+0

いいえいいえいいえを!私はそれを理解しようとしていないと感じています。私はいくつかの助けが必要です! –

答えて

4

変更この行:これに

values[len(values) - c] = len(values) 

:右

values[len(values) - 1] = c 

今あなたがアイテムの(C)を使用しているとして、インデックスを「追加」する代わりにインデックス各繰り返しでシフトされたリストに追加します。

+0

感謝します!私はそれがこの行と関係があることを知っていました。私は値の長さが8に等しく、この行を変更しなければならないことを知っていました。それを明確にしていただきありがとうございます! –

3

あなたの解決策は非常に複雑です.3つの異なる機能を持つ必要はありません。あなたがリストを持っていると仮定するとdataと呼ばれる、あなたは簡単に行うことができます。

for i in range(number_of_shifts): 
    data.append(data.pop(0)) 
+1

プログラミングを学ぶときは、よりオープンな方法でコードを書いている方が良いと思います – letsc

0

その他のソリューション:

data = data[k:] + data[:k] 
関連する問題