Re: [问题] 找出sublist在list中出现过的位置

楼主: mikapauli (桜花)   2014-04-25 21:20:27
#练习写写看
def indices(text, string):
result = []
ind = text.find(string)
nextfind = ind + 1
while nextfind:
result.append(ind)
text = text[nextfind:]
nextfind = text.find(string) + 1
ind += nextfind
return tuple(result)
def find_seq(main, sub):
main_str = ', ' + str(main)[1:-1]
sub_str = ', ' + str(sub)[1:-1]
return tuple(map(indices(main_str, ',').index, indices(main_str, sub_str)))
'''
>>> L = [1, 3, 4, 1, 2, 5, 6, 1, 2, 7, 4, 8, 1, 1, 2]
>>> subL = [1, 2]
>>> find_seq(L, subL)
(3, 7, 13)
'''
楼主: mikapauli (桜花)   2014-04-25 21:24:00
想法是用字串内建的搜寻,希望能有较好的效率
作者: tiefblau (tiefblau)   2014-04-25 22:06:00
while 那句的条件看不太懂text=text[search+1:] 感觉这句每次都会产新的list?
楼主: mikapauli (桜花)   2014-04-25 22:27:00
第一个函式的text需要是str,因为用了find用find搜寻失败会传回-1,亦即search+1为0时结束while
作者: uranusjr (←這人是超級笨蛋)   2014-04-25 22:38:00
上色推
作者: darkgerm (黑骏)   2014-04-25 22:40:00
蛮有趣的做法~XD
作者: tiefblau (tiefblau)   2014-04-25 23:10:00
!=-1不是比较好懂吗..好吧 我只能说 幸好我们没在合作
楼主: mikapauli (桜花)   2014-04-26 00:57:00
有道理,改写一下。
作者: Microscft (小软哥)   2014-04-26 02:34:00
么寿 为什么要搞成这样这应该过两个月连你自己也忘记是要做什么的吧
作者: ptero (ptero)   2014-04-27 17:34:00
请问这效率高很多吗?
楼主: mikapauli (桜花)   2014-04-27 19:19:00
不知道,有没有人要time一下!另外若需要对同一个list搜寻多个不同的sublist,可以把indices(main_str, ',')存起来不用重复计算。

Links booklink

Contact Us: admin [ a t ] ucptt.com