2017-06-21 94 views
0

我试图创建一个列表(b),它是列表(a)将k的成员向左旋转k次。我想出了这个关于Python 3:Python 3中的左侧列表旋转

n = 5 
k = 4 
a = [1,2,3,4,5] 
b = [] 

for i in a: 
    if (i + k) <= (n - 1): 
      b.append(a[i+k]) 
     elif (i+k-n) < (n-1): 
       b.append(a[i+k-n])  
print(b) 

但由于某些原因,这是行不通的,因为当我告诉打印(二)它返回一个列表,酷似列表

上午什么我错过了吗?

+1

注意''我循环通过在'了'的_values_,这应该是相当无关,你的算法,你与他们做算术,就好像他们是指数。 – RemcoGerlich

+1

[Python列表旋转]的可能重复(https://stackoverflow.com/questions/9457832/python-list-rotation) – JohanL

+0

@RemcoGerlich你是完全正确的!更改for循环for while循环做了诀窍 – Salvatore

回答

0

感谢@RemcoGerlich帮我看看我的错!下面是我很快就修好了我的代码:

n = 5 
k = 4 
a = [1,2,3,4,5] 
b = [] 
i = 0 
while (i < n): 
    if (i + k) <= (n - 1): 
      b.append(a[i+k]) 
    elif (i+k-n) < (n-1): 
      b.append(a[i+k-n]) 
    i = i+1 
print(b) 
3

一个简单的办法:

k = k % len(a) #we don't care about shifting x*len(a) times since it does not have any effect 

b = a[k:] + a[:k] 
+0

hi @YoavGlazner,你能为我们解开一下你的代码吗?经过15年的休息后,我正在编程,呵呵,我不太熟悉Python的语法,因为我真的刚开始学习它 – Salvatore

+0

@Salvatore - 我想你不知道** python的** * slice-符号* - 看看这个答案https://stackoverflow.com/questions/509211/explain-slice-notation –

+0

谢谢! :) @YoavGlazner – Salvatore