[問題] 尋找字串裡面關鍵字的所有下標

看板Python作者 ( )時間6年前 (2018/06/22 14:23), 編輯推噓4(4028)
留言32則, 7人參與, 6年前最新討論串1/1
例如 有一個字串str = 'AFBFDSAGDADEA' 我想知道A在這個字串的所有位置 有什麼函數可以用嗎 因為google了一下 有找到 str.find 跟str.rfind 但是這兩個只能找出最大跟最小的下標 但我是要全部的 該不會要用迴圈了? 謝謝! -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.109.32.9 ※ 文章網址: https://www.ptt.cc/bbs/Python/M.1529648593.A.CE4.html

06/22 14:32, 6年前 , 1F
[i for i in range(len(string)) if string[i] == "A"]
06/22 14:32, 1F

06/22 14:32, 6年前 , 2F
我只想到這樣
06/22 14:32, 2F

06/22 14:38, 6年前 , 3F
所以真的要用迴圈的意思嗎?
06/22 14:38, 3F

06/22 14:39, 6年前 , 4F
我個人覺得Python是滿依賴迴圈的...
06/22 14:39, 4F

06/22 14:40, 6年前 , 5F
我也剛學,看看別人的意見吧
06/22 14:40, 5F

06/22 14:46, 6年前 , 6F
寫code看的原來不是complexity或是易讀性 而是有沒有函數
06/22 14:46, 6F

06/22 14:46, 6年前 , 7F
可用
06/22 14:46, 7F

06/22 14:49, 6年前 , 8F
map(lambda x:x.start(), re.finditer('A', 'AFBF....'))
06/22 14:49, 8F

06/22 14:49, 6年前 , 9F
牛刀來了
06/22 14:49, 9F

06/22 14:51, 6年前 , 10F
我是從R過來的使用者 坦白說我是覺得有函數可用的狀況下
06/22 14:51, 10F

06/22 14:52, 6年前 , 11F
complexity還有易讀性都好多了......
06/22 14:52, 11F

06/22 14:53, 6年前 , 12F
In R: gregexpr("A", string)[[1]] 解決
06/22 14:53, 12F

06/22 14:54, 6年前 , 13F
所以我滿理解這篇原PO的疑問 hsnuyi不需要這樣吧 = =
06/22 14:54, 13F

06/22 14:55, 6年前 , 14F
看來上面用regex的方法比loop 好懂 嗯嗯
06/22 14:55, 14F

06/22 14:56, 6年前 , 15F
不好意思 我也是初學者 只是想知道是不是有漏掉什麼函數
06/22 14:56, 15F

06/22 14:56, 6年前 , 16F
可以直接處理我遇到的問題
06/22 14:56, 16F

06/22 15:00, 6年前 , 17F
對啊好懂最重要了是不是 https://tinyurl.com/ycj3g5sx
06/22 15:00, 17F

06/22 15:01, 6年前 , 18F

06/22 15:01, 6年前 , 19F
看這點閱數我就相信沒有可以直接處理的函數了
06/22 15:01, 19F

06/22 15:02, 6年前 , 20F
當然也有可能有library會實作
06/22 15:02, 20F

06/22 15:07, 6年前 , 21F
感謝兩位c大提供的資訊
06/22 15:07, 21F

06/22 15:15, 6年前 , 22F
str.find('A',2) 可以多一個控制項
06/22 15:15, 22F

06/22 15:16, 6年前 , 23F
如果你知道有幾個,那就好辦了
06/22 15:16, 23F

06/22 15:19, 6年前 , 24F
有啊 str.count就可以知道了
06/22 15:19, 24F

06/22 15:29, 6年前 , 25F
[x.start() for x in re.finditer('A', 'AFBF....')]
06/22 15:29, 25F

06/22 15:29, 6年前 , 26F
剛google到 import more_itertools as mit
06/22 15:29, 26F

06/22 15:30, 6年前 , 27F
list(mit.locate(str, lambda x: x == "A")) 也可以
06/22 15:30, 27F

06/23 07:35, 6年前 , 28F
真的只要找單字元嗎?還是要找substring?前者已經有
06/23 07:35, 28F

06/23 07:35, 6年前 , 29F
很多方法了。後者用str.find 可以提供starting index,
06/23 07:35, 29F

06/23 07:35, 6年前 , 30F
或是re.match 再用MatchObject 的start(group)
06/23 07:35, 30F

06/23 07:36, 6年前 , 31F
Oops 沒留意已經有re.finditer
06/23 07:36, 31F

06/23 09:02, 6年前 , 32F
欸 樓上說到重點了 下一步真的要找substring XD
06/23 09:02, 32F
文章代碼(AID): #1RB9NHpa (Python)