Re: [問題] 找出sublist在list中出現過的位置

看板Python作者 (桜花)時間11年前 (2014/04/25 21:20), 11年前編輯推噓4(4011)
留言15則, 6人參與, 最新討論串2/2 (看更多)
#練習寫寫看 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

04/25 21:24, , 1F
想法是用字串內建的搜尋,希望能有較好的效率
04/25 21:24, 1F

04/25 22:06, , 2F
while 那句的條件看不太懂
04/25 22:06, 2F

04/25 22:08, , 3F
text=text[search+1:] 感覺這句每次都會產新的list?
04/25 22:08, 3F

04/25 22:27, , 4F
第一個函式的text需要是str,因為用了find
04/25 22:27, 4F

04/25 22:31, , 5F
用find搜尋失敗會傳回-1,亦即search+1為0時結束while
04/25 22:31, 5F

04/25 22:38, , 6F
上色推
04/25 22:38, 6F

04/25 22:40, , 7F
蠻有趣的做法~XD
04/25 22:40, 7F

04/25 23:10, , 8F
!=-1不是比較好懂嗎..好吧 我只能說 幸好我們沒在合作
04/25 23:10, 8F

04/26 00:57, , 9F
有道理,改寫一下。
04/26 00:57, 9F
※ 編輯: mikapauli (42.64.10.134), 04/26/2014 01:21:48

04/26 02:34, , 10F
么壽 為什麼要搞成這樣
04/26 02:34, 10F

04/26 02:34, , 11F
這應該過兩個月連你自己也忘記是要做什麼的吧
04/26 02:34, 11F

04/27 17:34, , 12F
請問這效率高很多嗎?
04/27 17:34, 12F

04/27 19:19, , 13F
不知道,有沒有人要time一下!
04/27 19:19, 13F

04/27 19:24, , 14F
另外若需要對同一個list搜尋多個不同的sublist,
04/27 19:24, 14F

04/27 19:25, , 15F
可以把indices(main_str, ',')存起來不用重覆計算。
04/27 19:25, 15F
文章代碼(AID): #1JMc4Wkh (Python)
文章代碼(AID): #1JMc4Wkh (Python)