看板 Python 關於我們 聯絡資訊
#練習寫寫看 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) ''' -- 「……私も、…っ、 母様の娘に生まれて… 母様とこれまでともに過ごしてきて… 本当に、 幸せでございました…っ!!」 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 1.34.97.61 ※ 文章網址: http://www.ptt.cc/bbs/Python/M.1398432032.A.BAB.html
mikapauli:想法是用字串內建的搜尋,希望能有較好的效率 04/25 21:24
tiefblau:while 那句的條件看不太懂 04/25 22:06
tiefblau:text=text[search+1:] 感覺這句每次都會產新的list? 04/25 22:08
mikapauli:第一個函式的text需要是str,因為用了find 04/25 22:27
mikapauli:用find搜尋失敗會傳回-1,亦即search+1為0時結束while 04/25 22:31
uranusjr:上色推 04/25 22:38
darkgerm:蠻有趣的做法~XD 04/25 22:40
tiefblau:!=-1不是比較好懂嗎..好吧 我只能說 幸好我們沒在合作 04/25 23:10
mikapauli:有道理,改寫一下。 04/26 00:57
※ 編輯: mikapauli (42.64.10.134), 04/26/2014 01:21:48
Microscft:么壽 為什麼要搞成這樣 04/26 02:34
Microscft:這應該過兩個月連你自己也忘記是要做什麼的吧 04/26 02:34
ptero:請問這效率高很多嗎? 04/27 17:34
mikapauli:不知道,有沒有人要time一下! 04/27 19:19
mikapauli:另外若需要對同一個list搜尋多個不同的sublist, 04/27 19:24
mikapauli:可以把indices(main_str, ',')存起來不用重覆計算。 04/27 19:25