2012-01-06 52 views
1

我一直在使用Python,將它放在一邊,現在我很樂意回來。我試圖訪問列表中的前兩個元素,但我一直只獲取第一個元素,而不是第二個元素。班級內的Python列表不起作用

以下是來自Python shell。看來,當我使用[i:j]時,j=i+1,我只得到第一個元素。這是正確的行爲?

>>> p=['ho','he','hoo'] 
>>> p 
['ho', 'he', 'hoo'] 
>>> p[0:1] 
['ho'] 
>>> p[1:0] 
[] 
>>> p[0:1] 
['ho'] 
>>> p[1] 
'he' 
>>> p[0:3] 
['ho', 'he', 'hoo'] 
>>> p[0:2] 
['ho', 'he'] 
>>> p[0:3] 
['ho', 'he', 'hoo'] 
>>> p[1:2] 
['he'] 
我使用

Python的版本是:

的Python 3.2(R32:88445,2011年2月21日,21點11分06秒) [GCC 4.6.0 20110212(紅帽4.6.0 -0.7)]對linux2上

的Linux是Centos的,內核是

的Linux的Fedora 2.6.41.4-1.fc15.x86_64#1

+4

「這是正確的行爲嗎?」是。你對此有什麼困惑?你能否開始你的假設或你的推理,認爲它可能是錯誤的? – 2012-01-06 19:29:46

+0

你應該刷上切片語法。切片包括從索引開始,但排除索引。所以'myList [0:2]'得到位置0和1.如果你從0開始,你可以忽略它,所以'myList [:2]'是類似的。 – 2012-01-06 19:33:06

+1

Python中的切片是你想要的第一個項目,接下來是你*不需要的第一個項目。 – kindall 2012-01-06 19:44:19

回答

1

是的,這是正確的行爲。 [我:我+ 1]會給你一個項目。 [我:我+ 5]會給你五個。這是有意爲之的,原因就在於你明白了這一點,因爲你可以很快看到你有多少物品沒有進一步思考。

+0

謝謝。我是PERL和SKILL scripter的出身。它在這些語言中不能像這樣工作。 – user1134991 2012-01-06 20:24:28

+0

我知道。另一個細節是Python踢別的語言屁股。 – 2012-01-06 22:05:54

7

p[i:j],j是非包含的:您將選擇從ij - 1的所有元素。

2

是的,那是正確的行爲。從docs

S的從i到j的切片被定義爲物品的序列與 索引k使得i < = K <Ĵ。

3

Python切片使用包含開始索引和獨佔結束索引。有關更多詳細信息,請參閱docs。所以:

>>> list = [0, 1, 2, 3, 4] 
>>> i = 2 
>>> j = 3 
>>> # remember that lists are zero based 
>>> print list[i:j] # includes 2 and up to, but not 3 
[2] 
>>> print list[i:j+1] # includes 2 and up to, but not 3+1 
[2,3]