2013-04-22 95 views
2

,所以我得到這個錯誤:列表進行迭代在Python

TypeError: list indices must be integers, not str 

指着這行代碼:

if snarePattern[i] == '*': 

每當我用我的想法是簡單的Python

snarePattern = ['-', '*', '-', '*'] 
for i in snarePattern: 
    if snarePattern[i] == '*': 
     ... 

這是不允許的?我不知道什麼?

此外,如果有人知道我要去哪裏用這段代碼,你能想到一個更簡單的方法來創建和解析這樣的簡單模式嗎?我是Python的新手。

謝謝你們

+0

至於你的第二個問題(你能想到的更簡單的方法來創建和解析簡單的模式也是這樣嗎?),你會需要更具體。我會建議嘗試一些事情,並搜索堆棧溢出。如果您找不到任何內容並且仍然遇到問題,請查看常見問題的常見問題解答。如果你的問題很合適,請打開一個新問題並提問(提供你正在尋找的東西以及你試過的東西的細節)。我們可能能夠幫助你:) – mgilson 2013-04-22 01:09:34

回答

13

for i in snarePattern:經過各項目不是每個索引:

>>> snarePattern = ['-', '*', '-', '*'] 
>>> for c in snarePattern: 
     print c 


- 
* 
- 
* 

你可以把它改成

for i in range(len(snarePattern)): 

,如果你真的需要它,但它看起來像你不需要,只需檢查是否爲c == '*'

要經過一個指標更好方式

for i, c in enumerate(snarePattern): # i is each index, c is each character 
+0

gotcha謝謝!!! – DanMoore 2013-04-22 00:49:24

+4

不要使用'range(len())','enumerate()'更清潔。 – 2013-04-22 00:50:21

+0

@gddc true但在這種情況下,我只是展示如何單獨通過索引,爲簡單的答案增加了額外的混亂級別,但是,請注意 – jamylak 2013-04-22 00:52:12