数据结构-字典经典习题
2018-04-04 14:51
253 查看
导文
习题的经典之处在于把每一系列的习题玩透,编程的业务逻辑和思想就是经常使用的此类解决问题的逻辑,因此把握好每到经典习题用户输入一个数字
打印每一位数字及其重复的次数题目分析总结
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
相关文章推荐
- 入门经典_Chap06_习题:搜索 数据结构 欧拉回路
- Java经典习题(2)
- C#数据结构和算法学习系列十一----构建字典DictionaryBase 类和SortedList 类
- 经典面试题(三)附答案 算法+数据结构+代码 微软Microsoft、谷歌Google、百度、腾讯
- 数据库经典习题,
- 数据结构习题1
- 数据结构和算法经典100题-第18题
- 经典算法与数据结构的c++实现——冒泡排序
- 经典面试题(二)附答案 算法+数据结构+代码 微软Microsoft、谷歌Google、百度、腾讯
- 数据结构(线性结构习题)Problem C: 下车的顺序
- 算法竞赛入门经典习题2-4 子序列的和(subsequence)
- redis数据结构-字典
- 第十七章经典抽象数据结构二:树(数组实现)
- 数据结构经典算法学习之老鼠走迷宫01
- 列表、元组、字典、引用的一些操作(数据结构)--python学习(3)
- Python中列表、字典、元组、集合数据结构整理
- Python中几种数据结构的整理,列表、字典、元组、集合
- Python中3种内建数据结构:列表、元组和字典
- 算法竞赛入门经典习题3-1 得分(Score,ACM/ICPC Seoul2005,UVa1585)
- 线性表链表表相关习题及详解(选择题) ——数据结构