2010-05-29 40 views
1

以下代碼包含最後一個數字。列表問題中的步驟,Python初學者

>>> numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 
>>> numbers[::3] 
[1, 4, 7, 10] 

爲什麼不包括最後的數字2,比如10,8,6,4,2?

>>> numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 
>>> numbers[:1:-2] 
[10, 8, 6, 4] 

回答

4

似乎slice運算符不包含第二個參數。在其他詞,你1應該是一個0

>>> numbers = [1,2,3,4,5,6,7,8,9,10] 
>>> numbers[:1:-2] 
[10, 8, 6, 4] 
>>> numbers[:0:-2] 
[10, 8, 6, 4, 2] 

希望幫助:)

如需進一步信息,請參閱注5 here

+2

爲什麼不用[:: - 2]代替? – wvd 2010-05-29 11:41:26

+0

當然,這也有效,但我的觀點是要證明「1」這個論點是個問題。另外,像「Python將在缺少參數時使用0」這樣的通用語句可能會很麻煩。 – 2010-05-29 15:05:24

2

::正在用N個步驟遍歷列表。所以它是1,然後是4,等等。如果你想用2向後走,你想要[:: - 2]

0

因爲切片排除範圍中的第二個數字。 a[1:4]獲取元素1,2和3.同樣,a[10:6:-1]獲取元素10,9,8和7,但不是6.

+0

數字[10:6:-1]輸出10,9,8不是7. – shin 2010-05-29 11:47:42

+0

我指的是位置10到7中的某些任意數組中的元素,'a'。 – 2010-05-29 12:37:12

2

Python在遵循序列範圍較低包含,較高排除的模式方面非常一致。也就是說,如果你說範圍(1,5) - > [1,2,3,4]。包含較低的指數,排除上限。這對各種各樣的off-by-one和fencepost錯誤有很大的幫助。請參閱wikipedia以瞭解這些問題的簡要說明。