作者yauhh (哟)
看板Python
标题Re: [问题] 搜寻 nested list 中的字串
时间Sat Oct 25 13:50:07 2014
※ 引述《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) 。
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 118.168.168.133
※ 文章网址: http://webptt.com/cn.aspx?n=bbs/Python/M.1414216211.A.3D8.html
※ 编辑: yauhh (118.168.168.133), 10/25/2014 14:40:42
1F:推 hohiyan: 谢谢!我现在的进度到dictionary了,用dict做真的快很多 10/26 00:48
2F:→ YONIQ: occur 不要在用 list 包,有搜寻需要的话用 dict, set 10/27 05:46
3F:→ YONIQ: 搜寻 list 要遍历元素直到找到 10/27 05:49
4F:推 bigpigbigpig: occur() 可以改成: 10/27 06:26
5F:→ bigpigbigpig: def occur(x, ft): return x in ft 10/27 06:26
6F:推 bigpigbigpig: add() 可以改成: 10/27 06:50
7F:→ bigpigbigpig: def add(x, ft): 10/27 08:07
8F:→ bigpigbigpig: ft[ch] = ft.get(ch, 0) + 1 10/27 08:07
9F:→ bigpigbigpig: return ft 10/27 08:07
10F:→ bigpigbigpig: ft[x] = ft.get(x, 0) + 1 <== 前两行改成这样 10/27 08:08
11F:→ yauhh: 没关系,我不急,用list就好了 10/27 21:14
12F:→ yauhh: 我很受不了有些人那种没来由的着急,什麽都要最快 10/27 21:15
13F:→ yauhh: 我实务上在dictionary中一用就在里头放了超过6000个物件, 10/28 08:27
14F:→ yauhh: 写 in list(ft) 只是求个字面上,反应我对这个物件的理解 10/28 08:28
15F:→ yauhh: 使用上没有多大的障碍。 10/28 08:28
而且, ft[x] 是 O(1) , keys(ft) 难道也是 O(1) 吗? 我的判断,要嘛要写
x in keys(ft) 要嘛则写 x in list(ft) ,有什麽不同?或者说是 in list(ft) 就O(n)
而 in set(ft) 则O(k), k < n ,有这样的差别吗?
至於取值的部分,我照样用 ft[x] ,没有所谓该用 list 或 dict 包不包的问题。
16F:→ yauhh: 而bigpigbigpig,你的建议,我觉得最终只反映到程式会比较 10/28 08:29
17F:→ yauhh: 短,但是我好好写 if-else ,程度不同的同事可以看得懂, 10/28 08:30
18F:→ yauhh: 这是好处。我既然没有问题,就不必忙着来帮我解题。 10/28 08:30
※ 编辑: yauhh (118.168.161.23), 10/28/2014 08:36:49
※ 编辑: yauhh (118.168.161.23), 10/28/2014 08:39:42