2013-04-25 46 views
2

我是新的Python和做一些測試,我發現這一點。Python括號子字符串不工作,爲什麼?

>item="testing315testing08634567890" 
>item.index("086") 
17 
>item[17:10] 
'' 
>item[17:] 
'08634567890' 

我不明白爲什麼不工作,而與其他字符串工作。請注意,如果我這樣做...

> item[4:10] 
'ing315' 

中間的數字是否會導致麻煩?這是一個錯誤?我錯過了什麼嗎? 我使用Python 3.3

+0

如果你的目的是要看17-10,你可以做'item [17:10:-1]'。不知道這是你的意思。 – 2013-04-25 06:34:14

回答

1

列表片的終點指標是位置比開始指數越大,是不是片的大小!所以你想是這樣的:

item[17:len(item)] 

注意,這是完全等同於以前的片段:

item[17:] 

alist[a:b]應解釋這樣一個片斷的開始和結束索引:在切片從位於alista位置的項目開始,並在的b位置之前結束一個元素。 ab都是索引alist

0

當指數與這樣一個範圍內的字符串,你必須把下界第一和較高的鍵合第二,像這樣:

item[10:17] 

認爲它的話說, 「我想這個字符串從ab(其中b除外)」,如:

some_string[a:b] 

如果你希望字符串末尾(或開頭),你可以簡單地忽略界。

下面是一個例子:

my_string = "test" 
my_string[:2]  ==> "te" 
my_string[2:]  ==> "st" 
my_string[:]  ==> "test" 
my_string[1]  ==> "e" 
my_string[1:3]  ==> "es" 
+0

是的,我知道...在我的示例項目[17:10]中應該給出'08634567890',但它不起作用 – gugaiz 2013-04-25 00:54:00

+0

@ user2088601,第二個索引不是長度,它指定要從中抓取的字符串中的第二個位置。 Python期望第二個索引位於字符串的後面,而不是第一個。如果不是,則返回空字符串'「」'。你的輸出是完全預期的。 – mjgpy3 2013-04-25 00:59:02

0

索引中的第二個數字必須大於第一個數字。例如:

item[17:17] 
item[17:10] 
item[17:17-1] 

將全部迴歸,

'' 

如果你想匹配的指數後得到10個字符,你可以做這樣的事情:

>item="testing315testing08634567890" 
>item[item.index("086") : item.index("086")+10] 
'0863456789' 
0

正如其他有第二個參數是一個結束索引。但一個不錯的黑客也工作:

list[x:x+len] 

所以如果你想10個字符,在本例中起始於17,如:

item[17:17+10] will give you the desired result. 

注意:這不會造成任何索引錯誤,但如果字符串的長度比結束索引(17 + 10 == 27)短,它將產生與項目[17:]相同的結果。接受的答案解決提出的問題,但如果你從中間通緝10:

item="testing315testing08634567890some_other_stuff_here" 

item[17:] == "08634567890some_other_stuff_here" 
item[17:17+10] == "08634567890" 

了17 + 10的符號被保留,因爲它清楚地表明瞭意圖,並允許變量容易地更換可能直到知道運行。

相關問題