2016-03-28 117 views
1

我試圖運行一個代碼,將列表中的三個值的值移到右側。例如,我有一個列表[1,2,3,-3,15,6,71,42],我想要輸出[-3,15,6,71,42,1,2,3] ,但是該程序的當前輸出是[-3,15,6,71,42,8,8,8]。我找不到錯誤,但教授要我改變只有一行代碼來修復錯誤。所以這個錯誤一定不會太難找到。除了我似乎無法找到它: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

您的解決方案過於複雜 - 不需要有三個不同的功能。假設你有一個列表稱爲data,你可以簡單地做:

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

我認爲在學習編程時,以更開放的方式編寫代碼更好 – letsc

0

其他解決方案:

data = data[k:] + data[:k]