看板 Python 關於我們 聯絡資訊
假設我有兩個list如下: a = [1,3,5,7,9,2,4,6,8,0] b = [7,9,2] 如果我想寫一個function,找出a之中的哪個位置開始元素與b完全相符,比方說上例 我要在a中尋找連續3個元素為7、9、2的位置,其答案為3。 我目前是在a中找7,找到了再看下一個位置是否是9,依此類推,直到b裡面所有元素 都能符合條件就回傳當前位址,否則就繼續往下找。這個方法用了2個for迴圈,但寫 完總覺得應該能有更優雅的方法可以達到相同功能,我以"list/相鄰"等關鍵字google 沒有找到類似的議題,請問有人有其他好的方法能處理類似的問題,或是願意建議其 他關鍵字讓我去搜尋資料嗎? 謝謝。 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 111.250.100.83 ※ 文章網址: https://www.ptt.cc/bbs/Python/M.1542206353.A.668.html ※ 編輯: icetofux (111.250.100.83), 11/14/2018 22:39:46
lajji: [i for i in range(len(a)) if a[i:i+len(b)] == b] 11/14 23:38
jiyu520: [i for i in range(len(a)-len(b)+1) if a[i:i+len(b)] = 11/14 23:43
jiyu520: = b] 11/14 23:43
djshen: string matching 11/15 01:21
djshen: 樓上複雜度都是M*N 11/15 01:23
JinLime: ""join.(a).index("".join(b)) 11/15 01:40
yoyololicon: list有很多功能的,不用這麼哈扣XD 11/15 07:46
Yshuan: 用LCS去變形吧 11/15 11:13
TitanEric: KMP string matching變形 11/15 11:50
TitanEric: 不用LCS建表 只要有failure function就好~ 11/15 11:52
lajji: 六樓的做法也行得通 但如果a裡面出現兩次b的話我的會兩個都 11/15 14:05
lajji: 列出來 六樓的做法只會列出第一個 11/15 14:05
lajji: 順便幫更正 應該是"".join(a).index("".join(b)) 11/15 14:05
JinLime: 感謝修正 11/15 14:48