看板 Python 關於我們 聯絡資訊
例如 有一個字串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
clsmbstu: [i for i in range(len(string)) if string[i] == "A"] 06/22 14:32
clsmbstu: 我只想到這樣 06/22 14:32
eco100: 所以真的要用迴圈的意思嗎? 06/22 14:38
clsmbstu: 我個人覺得Python是滿依賴迴圈的... 06/22 14:39
clsmbstu: 我也剛學,看看別人的意見吧 06/22 14:40
hsnuyi: 寫code看的原來不是complexity或是易讀性 而是有沒有函數 06/22 14:46
hsnuyi: 可用 06/22 14:46
ckc1ark: map(lambda x:x.start(), re.finditer('A', 'AFBF....')) 06/22 14:49
ckc1ark: 牛刀來了 06/22 14:49
clsmbstu: 我是從R過來的使用者 坦白說我是覺得有函數可用的狀況下 06/22 14:51
clsmbstu: complexity還有易讀性都好多了...... 06/22 14:52
clsmbstu: In R: gregexpr("A", string)[[1]] 解決 06/22 14:53
clsmbstu: 所以我滿理解這篇原PO的疑問 hsnuyi不需要這樣吧 = = 06/22 14:54
hsnuyi: 看來上面用regex的方法比loop 好懂 嗯嗯 06/22 14:55
eco100: 不好意思 我也是初學者 只是想知道是不是有漏掉什麼函數 06/22 14:56
eco100: 可以直接處理我遇到的問題 06/22 14:56
clsmbstu: 對啊好懂最重要了是不是 https://tinyurl.com/ycj3g5sx 06/22 15:00
ckc1ark: https://stackoverflow.com/q/13009675 06/22 15:01
ckc1ark: 看這點閱數我就相信沒有可以直接處理的函數了 06/22 15:01
ckc1ark: 當然也有可能有library會實作 06/22 15:02
eco100: 感謝兩位c大提供的資訊 06/22 15:07
brad0315: str.find('A',2) 可以多一個控制項 06/22 15:15
brad0315: 如果你知道有幾個,那就好辦了 06/22 15:16
eco100: 有啊 str.count就可以知道了 06/22 15:19
TuCH: [x.start() for x in re.finditer('A', 'AFBF....')] 06/22 15:29
eco100: 剛google到 import more_itertools as mit 06/22 15:29
eco100: list(mit.locate(str, lambda x: x == "A")) 也可以 06/22 15:30
adrianshum: 真的只要找單字元嗎?還是要找substring?前者已經有 06/23 07:35
adrianshum: 很多方法了。後者用str.find 可以提供starting index, 06/23 07:35
adrianshum: 或是re.match 再用MatchObject 的start(group) 06/23 07:35
adrianshum: Oops 沒留意已經有re.finditer 06/23 07:36
eco100: 欸 樓上說到重點了 下一步真的要找substring XD 06/23 09:02