2012-01-20 15 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は明らかにint型です、まだエラーは、彼らが私も

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

を書いて、あなたがインデックスとして(oldcount, count)を使用しようとしている同じエラー

+0

奇妙なタイトルはここに私を引っ張っ... – 0xc0de

+0

私は、エラーメッセージが複数でそのインデックスを意味すると解釈される可能性がどのように見ることができます整数がサポートされています。 "文字列のインデックスは整数でなければなりません"と明確になります。ちょっと見て... – chepner

+0

@chepner:初心者には間違いがありますが、ドキュメント[http://docs.python.org/tutorial/introduction.html]には十分な明瞭さがあります 'アイコンのように、部分文字列スライス表記で指定できます。2つのインデックスはコロンで区切られています。 >>> >>>ワード[4] ' >>>ワード[0:2] '彼' >>>ワード[2:4] ' lp'' – 0xc0de

答えて

13

を得ることができます

ではないと言いますリストに追加します。これはタプルでありintではありません。

あなたはおそらく意味するか:

anagramlist.append(inwords[oldcount:count]) 

4

スライス構文が間違っています。コード:あなたはoldcountcountのタプルを作成し、文字列のインデックスとしてこれを使用している、countoldcountからスライスしていない

inwords[(oldcount, count)] 

inwords[oldcount, count] 

は同じ解析されます。

正しいPythonのスライスの構文は次のようになります。

inwords[oldcount:count] 
0

私はあなたのコードを理解していれば、あなたはおそらく,:を使用する必要がスライス表記を、使用しないようにしようとしています。そのカンマは、通訳者に、あなたのコードがタプルを文字列のインデックスとして使用することを理解させますが、これは明らかに許可されていません。

0

(inwords[oldcount, count])で何か問題があると思います。インデックスとして(oldcount, count)を使用することはできません。

2

anagramlist = inwords.split()をしようとしていますか?
あなたが本当にそれを手動でスライスしたい場合は、あなたが使用する必要がありますが:

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