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