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

作者: icetofux   2018-11-14 22:39:11
假設我有兩個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
沒有找到類似的議題,請問有人有其他好的方法能處理類似的問題,或是願意建議其
他關鍵字讓我去搜尋資料嗎?
謝謝。
作者: lajji (喇機)   2018-11-14 23:38:00
[i for i in range(len(a)) if a[i:i+len(b)] == b]
作者: jiyu520 (不要鯽魚我)   2018-11-14 23:43:00
[i for i in range(len(a)-len(b)+1) if a[i:i+len(b)] == b]
作者: djshen (djshen)   2018-11-15 01:21:00
string matching樓上複雜度都是M*N
作者: JinLime   2018-11-15 01:40:00
""join.(a).index("".join(b))
作者: yoyololicon (蘿莉大好)   2018-11-15 07:46:00
list有很多功能的,不用這麼哈扣XD
作者: Yshuan (倚絃)   2018-11-15 11:13:00
用LCS去變形吧
作者: TitanEric (泰坦)   2018-11-15 11:50:00
KMP string matching變形不用LCS建表 只要有failure function就好~
作者: lajji (喇機)   2018-11-15 14:05:00
六樓的做法也行得通 但如果a裡面出現兩次b的話我的會兩個都列出來 六樓的做法只會列出第一個順便幫更正 應該是"".join(a).index("".join(b))
作者: JinLime   2018-11-15 14:48:00
感謝修正

Links booklink

Contact Us: admin [ a t ] ucptt.com