Re: [問題] 搜尋 nested list 中的字串

作者: yauhh (小y寶貝)   2014-10-25 13:50:07
※ 引述《hohiyan (海洋)》之銘言:
: 大家好
: 我目前正在自學python,想請教是否有更好的方法來處理搜尋nested list中的資料。
: 例如一個 nested list 為 ft = [['a',10],['b',5],['c',11'],['d',3]]
: 題目為
: Function add() takes a single-character string and a ft, and modified the ft
: to increase the number of occurrences of that character by 1.
: 例如 add('a',ft) 會 return ft = [['a',11],['b',5],['c',11'],['d',3]]
: 而 add('i',ft) return ft = [['a',10],['b',5],['c',11'],['d',3],['i',1]]
要很快找到文字的次數,不要用 list 而要用 dictionary 就可以了。
list 是比較原始,方便循序搜尋的資料格式,而 dictionary 則是用標籤快速
尋找的格式。
ft = {'a':10, 'b':5, 'c':11, 'd':3}
def occur(x, ft):
return x in list(ft)
def add(x, ft):
if occur(x, ft):
ft.update({x: ft[x]+1})
else:
ft.update({x: 1})
return ft
我目前所理解的 dictionary ,大概是這樣:假設 ft 是 dictionary ,
dictionary 是一堆 key 對應到一堆 value ,有點像函數。
用 list(ft) 可以取出 ft 的 keys , keys 中每個東西是獨一的。
另外,用 ft.update({k1: v1, k2: v2}) 可以直接把 ft 中的 k1 和 k2
的對應值洗掉。
所以如果要讓對應值一直往上加,要先從 ft 把舊的對應值很快抓出來,
然後,根據舊的對應值修改為新的對應值,再洗回去。
dictionary 抓對應值的速度是 O(1) ,洗回去的速度也是 O(1) 。
作者: hohiyan (海洋)   2014-10-26 00:48:00
謝謝!我現在的進度到dictionary了,用dict做真的快很多
作者: YONIQ   2014-10-27 05:46:00
occur 不要在用 list 包,有搜尋需要的話用 dict, set搜尋 list 要遍歷元素直到找到
作者: bigpigbigpig (To littlepig with love)   2014-10-27 06:26:00
occur() 可以改成:def occur(x, ft): return x in ftadd() 可以改成:def add(x, ft):ft[ch] = ft.get(ch, 0) + 1return ftft[x] = ft.get(x, 0) + 1 <== 前兩行改成這樣
作者: yauhh (小y寶貝)   2014-10-27 21:14:00
沒關係,我不急,用list就好了我很受不了有些人那種沒來由的著急,什麼都要最快我實務上在dictionary中一用就在裡頭放了超過6000個物件,寫 in list(ft) 只是求個字面上,反應我對這個物件的理解使用上沒有多大的障礙。而bigpigbigpig,你的建議,我覺得最終只反映到程式會比較短,但是我好好寫 if-else ,程度不同的同事可以看得懂,這是好處。我既然沒有問題,就不必忙著來幫我解題。

Links booklink

Contact Us: admin [ a t ] ucptt.com