前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >提高元组的访问效率 and 统计一个序列中元素出现的频度

提高元组的访问效率 and 统计一个序列中元素出现的频度

作者头像
Gorit
发布2021-12-09 15:25:38
2820
发布2021-12-09 15:25:38
举报
文章被收录于专栏:Gorit 带你学全栈系列

二、提高元组的访问效率

1.1 问题引入

我们一般访问python中数据结构的时候都是通过其数组下标进行访问的,元组,列表,集合等等都是的,但是如果数据比较杂乱,我们要改怎样处理呢?

代码语言:javascript
复制
a = ('gorit','male','18','gorit@qq.com')

#访问姓名
print(a[0])
#访问邮箱
print(a[3])

但是数据多起来后,加上qq号,手机号,地址,邮编等等一些更多的信息,这么多哪里记得住啊

1.2 解决方案

1、定义数值常量

学过c语言的同学知道,这种问题可以用结构体,宏定义,还有枚举类型解决。python中虽然没宏定义,但我们可以用类似宏定义的方式,但不是宏定义可以解决,看下面这段代码

代码语言:javascript
复制
#Name = 0
#Gender = 1
#Age = 2
#Emil = 3

#上面的太慢了,我们可以使用列表拆包的形式,快速赋值
Name,Gender,Age,Emil = range(4)
a = ('gorit','male','18','gorit@qq.com')

#访问姓名
print(a[Name])
#访问邮箱
print(a[Emil])
2、运用标准库中collections.namedtuple替代内置tuple

实际上就是通过类和创建对象进行访问

代码语言:javascript
复制
from collections import namedtuple

student = namedtuple('Student',['name','gender','age','emil'])

stu1 = student('gorit','male','18','gorit@qq.com')
print(stu1.name)
print(stu1.age)
print(stu1.gender)
print(stu1.emil)

三、统计序列中元素出现的频度

2.1 场景再现

1、给定一个某随机序列[11,22,33,2,3,2,2,4,5,1,…],找到出现次数最高的三个元素,它们出现的次数是多少? 2、统计四六级考试中阅读题中出现频率最高的10歌词,它们出现的次数是多少

2.2 常用方法

我们先创建一个随机数列

代码语言:javascript
复制
from random import randint

data = [randint(0,20) for _ in range(1,21)]

我们的目的是统计数据,所以就需要用字典来存储,键代表数字,值代表出现的次数,最后用循环迭代,就可以统计出我们需要的数据,看下面这段代码

代码语言:javascript
复制
from random import randint

data = [randint(0,10) for _ in range(1,11)]#随机数生成随机列表
print(data)
c = dict.fromkeys(data,0)#键值配对

for x in data:
    c[x] +=1#出现一次 加一

print(c)

现在回到一开始的问题,统计出现次数最高的前三个数,我们进行一次排序即可

2.3 其它方案

2.3.1 使用collections.Counter对象

代码实现:

代码语言:javascript
复制
from random import randint
from collections import Counter
data = [randint(0,10) for _ in range(1,11)]

c1 = Counter(data)
print(data)
print(c1)

我们使用Counter构造器可以很容易的看出统计的结果,但这并不是最终目的,我们需要快速查到出现次数最多的前三个数字,这时候我们可以通过most_common返回出现次数最多的前三个数字

代码语言:javascript
复制
from random import randint
from collections import Counter
data = [randint(0,10) for _ in range(1,11)]

c1 = Counter(data)
print(data)
print(c1)

d =c1.most_common(3)#返回前三数显次数最多的数据
print(d)

怎么样,你学会了吗?

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019/02/26 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 二、提高元组的访问效率
    • 1.1 问题引入
      • 1.2 解决方案
      • 三、统计序列中元素出现的频度
        • 2.1 场景再现
          • 2.2 常用方法
            • 2.3 其它方案
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档