作者icetofux ()
看板Python
標題[問題] 在list尋找相鄰的元素
時間Wed Nov 14 22:39:11 2018
假設我有兩個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://webptt.com/m.aspx?n=bbs/Python/M.1542206353.A.668.html
※ 編輯: icetofux (111.250.100.83), 11/14/2018 22:39:46
1F:推 lajji: [i for i in range(len(a)) if a[i:i+len(b)] == b] 11/14 23:38
2F:推 jiyu520: [i for i in range(len(a)-len(b)+1) if a[i:i+len(b)] = 11/14 23:43
3F:→ jiyu520: = b] 11/14 23:43
4F:→ djshen: string matching 11/15 01:21
5F:→ djshen: 樓上複雜度都是M*N 11/15 01:23
6F:推 JinLime: ""join.(a).index("".join(b)) 11/15 01:40
7F:推 yoyololicon: list有很多功能的,不用這麼哈扣XD 11/15 07:46
8F:推 Yshuan: 用LCS去變形吧 11/15 11:13
9F:推 TitanEric: KMP string matching變形 11/15 11:50
10F:→ TitanEric: 不用LCS建表 只要有failure function就好~ 11/15 11:52
11F:推 lajji: 六樓的做法也行得通 但如果a裡面出現兩次b的話我的會兩個都 11/15 14:05
12F:→ lajji: 列出來 六樓的做法只會列出第一個 11/15 14:05
13F:→ lajji: 順便幫更正 應該是"".join(a).index("".join(b)) 11/15 14:05
14F:→ JinLime: 感謝修正 11/15 14:48