概述
导文
习题的经典之处在于把每一系列的习题玩透,编程的业务逻辑和思想就是经常使用的此类解决问题的逻辑,因此把握好每到经典习题
用户输入一个数字
- 打印每一位数字及其重复的次数
题目分析总结
1.此题分析点在于字典的构建,通过构建字典来分析数据的重复次数
2.此题要总结reversed()函数,此函数要总结学习使用,reversed(seq)函数内部是序列。
Return a reverse iterator. seq must be an object which has a reversed() method or supports the sequence protocol (the len() method and the getitem() method with integer arguments starting at 0).
reversed()函数返回的是一个翻转迭代器,另外seq必须是序列对象,满足序列协议。
此题解法如下
#!/bin/python3
#-*- coding: UTF-8 -*-
from collections import OrderedDict
num = input('your number: ')
dictnum = OrderedDict()
for key in reversed(num):
print(key,end=" ")
#此处避免使用三目表达式,True statement if expression else False statement
#三目表达式True后面是statement动作,而本题此处是expression
if not key in dictnum:
dictnum[key] = 1
else:
dictnum[key] += 1
print()
print(dictnum)
运行结果:
your number: 23423
3 2 4 3 2
OrderedDict([('3', 2), ('2', 2), ('4', 1)])
数字重复统计
- 随机产生100个整数
- 数字的范围[-1000,1000]
- values值升序输出所有不同的数字及其重复的次数
题目分析总结
1.字典统计重复次数
2.随机random的使用
3.sorted()和sort()的使用
首先学习sorted(可参考安装说明书Python HOWTOs中的排序):
语法:sorted(iterable[, key][, reverse])
Return a new sorted list from the items in iterable 返回一个新的经过排序后的list从可迭代对象中获取到的
key specifies a function of one argument that is used to extract a comparison key from each list element: key=str.lower. The default value is None (compare the elements directly).
key是指定一个函数的参数,这个函数用于提取列表的比较对象,或比较内容,默认为None
reverse is a boolean value. If set to True, then the list elements are sorted as if each comparison were reversed.
翻转是根据bool值确定是否对排序后的列表进行翻转
二者的区别有如下两点
**第一点:**list.sort()是不会生成新的列表,就原有的内存排序根据key值排序要求就地修改,内存空间发生改变,只能用于列表。
第二点:sorted是对可迭代对象都可以进行排序,并生成新的序列
4.就此题而言参考可参考安装说明书Python HOWTOs中的排序可知,还可以采用另外一种方式排序就是operator模块。
此题解法1(sorted)
#!/bin/python3
#-*- coding: UTF-8 -*-
import random
lstnum = [random.randint(0,10) for i in range(100)]
dictnum = {}
for key in lstnum:
if not key in dictnum:
dictnum[key] = 1
else:
dictnum[key] += 1
print(dictnum)
#采用sorted(iterable,key,reverse)
for w in sorted(dictnum,key=dictnum.get,reverse=True):
print(w,dictnum[w],end= "###")
运行结果:
{0: 10, 1: 13, 2: 14, 3: 8, 4: 12, 5: 4, 6: 12, 7: 4, 8: 9, 9: 10, 10: 4}
2 14###1 13###4 12###6 12###0 10###9 10###8 9###3 8###5 4###7 4###10 4###
此题解法2(operator)
#!/bin/python3
#-*- coding: UTF-8 -*-
import random
import operator
lstnum = [random.randint(0,10) for i in range(100)]
dictnum = {}
for key in lstnum:
if not key in dictnum:
dictnum[key] = 1
else:
dictnum[key] += 1
print(dictnum)
#采用operator模块进行比较
sorted_dictnum = sorted(dictnum.items(),key=operator.itemgetter(1))
print(sorted_dictnum)
运行结果:
{0: 11, 1: 9, 2: 8, 3: 10, 4: 6, 5: 8, 6: 10, 7: 11, 8: 12, 9: 6, 10: 9}
[(4, 6), (9, 6), (2, 8), (5, 8), (1, 9), (10, 9), (3, 10), (6, 10), (0, 11), (7, 11), (8, 12)]
字符串重复统计
- 字符表’abcdefghijklmnoppqrstuvwxyz’
- 随机挑选2个字母组成字符串,共挑选10个
- 降序输出所有不同的字符串及重复的次数
此题考点
1.字符表中随机取两,可以通过采样,但是采样会从中取出两个不同的字符,
2.如果通过随机索引,此时可以组合成任意的两个字符
3.列表生成式的写法,列表生成式每一个参数后面紧跟限制条件,有点像一个循环中多个if条件时,if是嵌套和还是兄弟关系,同样在列表生成式中限制条件同样也有限制条件,限制条件有些是嵌套关系,嵌套关系则随着变量紧跟其后,兄弟关系最后一次性写多个if条件。
4.排序方法,根据之前的学习可知排序通常两种方式,随机选择即可
此题解法
#!/bin/python3
#-*- coding: UTF-8 -*-
import random
stri = 'abcdefghigklmnopqrstuvwsyz'
#采用列表生成式达到效率更高、更快的效果
lst = [''.join(stri[random.randint(0,25)] for i in range(2)) for _ in range(10)]
dictalp = {}
for key in lst:
if not key in dictalp:
dictalp[key] = 1
else:
dictalp[key] += 1
for k in sorted(dictalp,key=dictalp.get):
print(k,dictalp[k],end='##')
运行结果:
ib 1##pq 1##ke 1##eo 1##dk 1##ww 1##si 1##ld 1##gs 1##hl 1
最后
以上就是难过眼神为你收集整理的数据结构-字典经典习题导文的全部内容,希望文章能够帮你解决数据结构-字典经典习题导文所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复