字典练习

1、打印用户输入的数字,打印每一位数字,及其重复的次数

 

num = '   0231324443510  '
counter = {}
num = num.strip(' ').rstrip('0')
for i in num:
    if i not in counter.keys():
        counter[i] = 0
    counter[i] += 1
    
print(counter)

 

2、数字重复的统计,随机产生100个整数,范围在[-1000,1000],升序打印这些数字和其重复次数

 

使用sorted函数排序,字典的缺省值添加使用d.get(i,0)或者d.setdefault(i,0)

import random
nums = [random.randint(-1000,1000) for _ in range(100)]
counter={}
for i in nums:
    counter[i] = counter.get(i,0) + 1
newdict = sorted(counter.items())
print(newdict)

 

也可以使用工厂化函数创建缺省字典,from collections import defaultdict

import random
from collections import defaultdict
nums = [random.randint(-1000,1000) for _ in range(100)]
counter=defaultdict(int)
for i in nums: counter[i] = counter[i] + 1
newdict = sorted(counter.items()) print(newdict)

使用列表排序后输出

import random
from collections import defaultdict
nums = [random.randint(-1000,1000) for _ in range(100)]
counter=defaultdict(int)
for i in nums:
    counter[i] = counter[i] + 1

key = list(counter.keys())
key.sort()
newlist = [0] * len(key)
for j,val in enumerate(key):
    newlist[j] = val,counter[val]
print(newlist)

 

比较使用列表和使用字典的效率

import random
from collections import defaultdict
nums = [random.randint(-1000,1000) for _ in range(100)]
counter=defaultdict(int)

for i in nums:
    counter[i] = counter[i] + 1

先生成字典

%%timeit
newdict = sorted(counter.items())

直接使用sorted 输出  21.4 µs ± 201 ns per loop (mean ± std. dev. of 7 runs, 10000 loops each)

%%timeit
key = list(counter.keys())
key.sort()
newlist = [0] * len(key)
for j,val in enumerate(key):
    newlist[j] = val,counter[val]

使用列表排序后 输出  18.1 µs ± 67.1 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)

结论,内建函数并非最优函数,在某些情况下,需要效率就要考虑函数的使用的必要性。

3、字符表a-z,随机挑选2个字母组成字符串,共挑选100个,降序输出所有不同的字符串及重复次数。

alpha = 'abcdefghijklmnopqrstuvwxyz'
words = [random.choice(alpha) + random.choice(alpha) for _ in range(100)]
d={}
for i in words:
    d [i] = d.get(i,0) + 1

newlist = sorted(d.items(),reverse=True)
print(newlist)

 使用formkeys

import random
alpha = 'abcdefghijklmnopqrstuvwxyz'
words = [random.choice(alpha) + random.choice(alpha) for _ in range(100)]
d=dict.fromkeys(words,0)
for i in words:
    d[i] += 1
print(sorted(d.items(),reverse=True),len(d))

使用工厂化函数

import random
from collections import defaultdict
nums = [random.randint(-1000,1000) for _ in range(100)]
counter=defaultdict(int)

for i in nums:
    counter[i] = counter[i] + 1

使用OrderedDict

from collections import OrderedDict

alpha = 'abcdefghijklmnopqrstuvwxyz'
l = [random.choice(alpha)+random.choice(alpha) for _ in range(100)]
l = sorted(l,reverse=True)
counter = OrderedDict()
for i in l:
    counter[i] = counter.setdefault(i,0) + 1
print(counter)

 

posted on 2018-08-15 15:32  Riper  阅读(269)  评论(0编辑  收藏  举报

导航