作者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/cn.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