2011-11-29 88 views
0

列表我必須使用一個向後循環:迭代通過不同長度

for i in range(len(my_ls))[::-1]: 
    print i 

但是一些清單的具有length = 1(如在['one'])。

結果解釋器根本沒有打印任何東西。

儘管如此,在python自己的shell中,它可以正常工作,並且按照計劃打印0。

任何想法如何克服這個問題?
我在Debian Squeeze上運行Python 2.6.6。

+1

你的意思是它在python shell中工作,但不能從腳本中工作? – favoretti

+2

這很奇怪。發佈整個示例代碼,包括明確的測試數據 – Joe

回答

4

難道你不只是通過列表reversed()[docs],然後迭代結果反向迭代器?

for x in reversed(lst): 
    print x 
+1

NB'reverse'突變列表。 – Joe

+0

'因爲我在逆轉(my_ls)'得到了這個(反正是更好的風格)。 –

+1

非常抱歉,夥計們!我在同一頁面上忘記了'if len(my_ls)> 1'。應該早點睡覺了。 :) –

1

這是你想要實現的嗎?

>>> li = ['one'] 
>>> for i in range(len(li)-1, -1, -1): 
... print li[i] 
... 
one 

編輯:我的答案和Acorn的一個之間的不同之處在於:

  • Acorn的方法[使用.reverse()]代替
  • 使用reversed()將創建一個迭代器對象上修改了列表
  • 我的方法沒有做任何前兩個

使用.reverse()reversed()在python中比較習慣。但range參數在那裏給你這種可能性(記憶方面,我不知道我的方法是否比reversed()有任何優勢!)。

HTH!

+0

非常抱歉,夥計們!我在同一頁面上忘記了'if len(my_ls)> 1'。應該早點睡覺了。:) –

+0

@paul_k - 不知道你的意思,但我在答案中提到的任何方法都可以工作,不管列表中的項目數量是多少... – mac

+0

當然,現在一切正常。我用'reversed()'。我只是使用這個'if'語句並切斷了所有的單項清單。這就是爲什麼在這種情況下沒有印刷。 –

0

首先,打印出的所有內容都是距離範圍末端的每個項目的偏移量,而不是列表中的項目。

該範圍看起來像你正試圖用Python寫C語言,對我來說。

你需要的是這樣的:

>>> l = ['one'] 
>>> for each in l[-1::-1]: 
>>> print each 
... 
one 
>>> l.append('two') 
>>> for each in l[-1::-1]: 
>>> print each 
... 
two 
one 

建設從列表到列表的開始結束for each in l[-1::-1]迭代,無論列表大小的和無range尷尬的參與。