2012-11-14 47 views
1

輸入:爲什麼我沒有得到完整的索引! (Python列表)

def part3 (x): 
    for i in range (len(x)): 
     while i <= len(x): 
      print (x[i]) 
      return x[i+1] 


x=[5,2,3] 
x.sort() 
print(x[0],x[1], x[2]) 
print(part3(x)) 

輸出:

2 3 5 
2 
3 

我的問題:爲什麼我沒有拿到5後3?!?!不應該功能去x [2]?!?!

+0

你不會在while循環中增加你的'i' – inspectorG4dget

+0

這段代碼真的很奇怪。你爲什麼要循環訪問這些值,然後使用這些值作爲索引? –

+0

對不起,修正了它。 – user1730110

回答

2

功能是在你的循環(一個或多個)的第一次迭代返回,因爲你有一個return聲明那裏。所以,當你有

print(part3(x)) 

首先print(x[i])(其中i = 0因爲這是第一次迭代)完全是你while -loop執行,那麼函數(x[i+1])的返回值是由原始打印語句上面印着。

你打電話x.sort()後,x[2, 3, 4],所以x[0]2x[0+1] = x[1]3,這說明你的輸出。

不能確定你想使用此代碼實現,所以很難給你建議如何解決它的。如果你只是想打印的x的內容,然後你讓waayy複雜得多,它必須是,你可以簡單地做

for i in x: 
    print(i) 

請注意,您需要這裏有一個return語句,所以你不需要多餘的print;即

print(part3(x)) 

只想成爲

part3(x) 

,因爲你是做印刷的功能本身。

1

你正在做錯誤的循環。我認爲這一點是打印x的每個元素。

你想:

def part3(x): 
    for element in x: 
     print(element) 

現在請注意:

  1. 你不需要內部while循環for循環。
  2. 你不想在循環中返回任何東西,因爲它會跳出循環並退出函數。
  3. 在python中,你可以直接遍歷數組而不使用索引變量。
+0

哇我覺得啞巴。謝謝:) – user1730110

0

你可以看到「2」內打印的結果,你看到的「3」爲打印「返回X [I + 1]」的結果,你沒有看到「5」 bcoz你離開你的while循環和一個函數。

如果所有你需要的是打印所有這些值並返回最後一個你可以試試這個:

def part3 (x): 
    for val in x: 
     print val 
    return x[-1] 

,如果你需要知道的索引,那麼你可以嘗試枚舉:

def part3 (x): 
    for i, val in enumerate(x): 
     print i, val 
    return x[-1] 
相關問題