2014-10-28 114 views
0
st = "abXabXAbX" 
ch = "A" 
st = st.lower() 
ch = ch.lower() 


for i in st: 
    if (i==ch): 
     print st.find(i) 

我想在字符串「st」中將字符「ch」以大寫和小寫的方式進行定位。 for循環在檢測到第一個「a」時陷入困境,如何讓循環移動來檢查字符串的其餘部分?如何讓一個循環繼續向下一個字符串?

+0

的循環不是「卡住」,你只是用一種奇怪的方式'find'功能。 – kirelagin 2014-10-28 08:05:44

+0

看看一些解決方案[這裏](http://stackoverflow.com/questions/4664850/find-all-occurrences-of-a-substring-in-python) – chthonicdaemon 2014-10-28 09:31:38

+0

如果你發現任何的有用的答案,請接受其中之一。 – Korem 2014-10-31 12:07:41

回答

1

for循環沒有卡住,但它應該前進。你認爲它卡住了,因爲find返回第一個它發現的項目。它總是遇到它在索引0,所以你的代碼打印0,0,0。

對於此運行,你可以使用enumerate保留那封信的指數跟蹤:

for i, ltr in enumerate(st): 
    if (ltr==ch): 
     print i 
1
>>> st = "abXabXAbX".lower() 
>>> ch = "A".lower() 
>>> [ ix for ix,item in enumerate(st) if item == ch] 
[0, 3, 6] 
+0

你不需要'''.join(st).split()' - 你可以做'enumerate(st)'。 – chthonicdaemon 2014-10-28 08:01:41

1
st = "abXabXAbX" 
ch = "A" 
st = st.lower() 
ch = ch.lower() 
pos = st.find(ch) 
print(pos) 

while pos >= 0: 
    pos=st.find(ch,pos+1) 
    if pos>-1: 
     print(pos) 

這會給你所有位置

+0

更優雅的w/o第一次打印,然後'while pos> = 0:print(pos); pos = st.find(ch,pos + 1' – Korem 2014-10-28 16:51:05

+0

謝謝你,這幫了我很多。 – 2014-11-03 02:09:22