2012-01-20 151 views
2

代碼:Python字符串切片

count = 0 
oldcount = 0 
for char in inwords: 
    if char == " ": 
     anagramlist.append(inwords[oldcount, count]) 
     oldcount = count 
     count = 0 
    else: 
     count += 1 

錯誤:

Traceback (most recent call last): 
    File "C:/Users/Knowhaw/Desktop/Python Programs/Anagram solver/HTS anagram.py", line 14,   
in <module> 
    anagramlist.append(inwords[oldcount, count]) 
TypeError: string indices must be integers 

這到底是怎麼回事? 計數和oldcount顯然是整數,但錯誤說,他們是不是

我甚至可以寫

anagramlist.append(inwords[int(oldcount), int(count)]) 

,並得到了同樣的錯誤

+0

的怪題把我拉到這裏... – 0xc0de

+0

我可以看到錯誤消息,怎麼可能被解釋爲暗示有多個編制索引整數是支持的。 「字符串索引必須是整數」會更清晰。只是一個觀察... – chepner

+0

@chepner:它肯定看起來令人困惑的消息爲初學者,但文檔[http://docs.python.org/tutorial/introduction.html]有足夠的清晰度 'Like in Icon,substrings可以用切片符號指定:用冒號分隔的兩個索引。 >>> >>>字[4] 'A' >>>字[0:2] '他 >>>字[2:4] ' lp'' – 0xc0de

回答

13

您正在嘗試使用(oldcount, count)作爲索引到名單。這是一個元組,不是int。

你或許意味着:

anagramlist.append(inwords[oldcount:count]) 

4

您的切片語法錯誤。代碼:

inwords[oldcount, count] 

被解析一樣:

inwords[(oldcount, count)] 

你不能從oldcount切片到count,你要創建的oldcountcount一個元組,並將它作爲一個字符串索引。

正確的Python切片語法爲:

inwords[oldcount:count] 
0

如果我理解你的代碼,你可能嘗試使用切片標誌,這就需要使用的:,不,。這個逗號使得解釋器理解你的代碼是使用一個元組作爲字符串的索引,這顯然是不允許的。

0

我認爲(inwords[oldcount, count])有問題。您不能使用(oldcount, count)作爲索引。

2

你只是想做anagramlist = inwords.split()
如果你真的想手動切它,你將不得不使用:

anagramlist.append(inwords[oldcount:count+oldcount])