[问题] 在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