[問題] 在list尋找相鄰的元素

看板Python作者時間5年前 (2018/11/14 22:39), 5年前編輯推噓7(707)
留言14則, 7人參與, 5年前最新討論串1/1
假設我有兩個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

11/14 23:38, 5年前 , 1F
[i for i in range(len(a)) if a[i:i+len(b)] == b]
11/14 23:38, 1F

11/14 23:43, 5年前 , 2F
[i for i in range(len(a)-len(b)+1) if a[i:i+len(b)] =
11/14 23:43, 2F

11/14 23:43, 5年前 , 3F
= b]
11/14 23:43, 3F

11/15 01:21, 5年前 , 4F
string matching
11/15 01:21, 4F

11/15 01:23, 5年前 , 5F
樓上複雜度都是M*N
11/15 01:23, 5F

11/15 01:40, 5年前 , 6F
""join.(a).index("".join(b))
11/15 01:40, 6F

11/15 07:46, 5年前 , 7F
list有很多功能的,不用這麼哈扣XD
11/15 07:46, 7F

11/15 11:13, 5年前 , 8F
用LCS去變形吧
11/15 11:13, 8F

11/15 11:50, 5年前 , 9F
KMP string matching變形
11/15 11:50, 9F

11/15 11:52, 5年前 , 10F
不用LCS建表 只要有failure function就好~
11/15 11:52, 10F

11/15 14:05, 5年前 , 11F
六樓的做法也行得通 但如果a裡面出現兩次b的話我的會兩個都
11/15 14:05, 11F

11/15 14:05, 5年前 , 12F
列出來 六樓的做法只會列出第一個
11/15 14:05, 12F

11/15 14:05, 5年前 , 13F
順便幫更正 應該是"".join(a).index("".join(b))
11/15 14:05, 13F

11/15 14:48, 5年前 , 14F
感謝修正
11/15 14:48, 14F
文章代碼(AID): #1Rx3EHPe (Python)