探索 Python 字典与进制转换:频次统计及数字进制的巧用

在 Python 编程学习过程中,掌握字典(dict)和数值进制转换是两个非常实用的基础技能。前者是处理结构化数据的利器,后者则在数据编码、位运算、程序输出优化中经常出现。同时,练习两者可以帮助养成严谨的思维方式。

本文将通过字典的用法十进制转任意进制函数的实战实现,带你掌握两大关键知识点。

首先,学习回顾一下字典的相关知识点:

一、字典基础知识详解

字典的特点

  • 无序(3.7+ 默认保序,但逻辑上无序)

  • 键不可重复,值可重复

  • 支持修改与动态添加

  • 每个元素都是“键值对”

常见的字典的创建方式:

# 使用花括号创建
d = {"name": "小鸥", "age": 18}

# 使用 dict() 函数创建
d = dict(name="小鸥", age=18)

二、字典的常用操作

添加或修改元素

d["name"] = "小鸥"   # 修改已有键
d["sex"] = "男"     # 添加新键

字典中键、值、以及键值对的遍历方式的写法:

# 1. 遍历键
for key in d:
    print(key)

# 2. 遍历值
for value in d.values():
    print(value)

# 3. 遍历键值对
for key, value in d.items():
    print(key, value)

结果学习了上面的对于字典的基本操作的实例,相信你对于字典已经有所掌握了。那么对于字典的常用函数、操作方法以及相应的用法介绍,我也做了以下的总结: 


三、实战一:统计列表中字符的出现频次

刚才在上文,我们已经学习了字典的相关内容,接下来我们通过一个例子来加强对于字典的认识。

首先,我们创建了一个具有以众多字母为元素的列表,以及用于统计这些字母元素个数的初始字典。

核心思路:

  1. 创建一个空字典便于对于字母元素的出现次数进行多次统计。
  2. 利用for循环,将列表中的元素依次进行if条件判断,如果出现那么次数加1,如果没出现那么计数就保存不变为1。
  3. 最后利用max()和min()函数得到出现次数最多及最少的键(字母元素)。
UU = ["A", "B", "D", "K", "D", "J", "A", "K", "J", "C", "B", "D", "J", "A"]
my_dict = {"A": 0, "B": 0, "C": 0, "D": 0, "J": 0, "K": 0} #最开始的字母统计数量都为0
                                                           #"元素":出现次数
for item in UU:            #从UU中依次取出元素进行判断
    if item in my_dict:
        my_dict[item] += 1   #如果元素在my_dirt字典里,统计数量(字典的值)就加1
    else:
        my_dict[item] = 1  # 处理未定义的键

# 输出出现最少的字符
print("出现次数最少的是 "min(my_dict, key=my_dict.get))
                         #结果为K
# 输出出现最多的字符
print("出现次数最多的是 " + max(my_dict, key=my_dict.get))
                       #结果为A

 补充说明:

  • 要找到最大值对应的,max() 函数对于字典,我们可以通过指定 key 参数来决定是基于键还是值来获取最大值。
  • max(my_dict, key=my_dict.get) 使用 max() 函数来获取字典中值最大的键。key=my_dict.get 表示我们基于字典的来比较大小。


四、实战二(重点):十进制转任意进制函数(2~16进制)

当你需要将一个十进制数转换成二进制、八进制、十六进制等格式时,内置的 bin()oct()hex() 虽然好用,但不够通用。下面这段函数能实现从 2 到 16 任意进制转换:

对于数字的判断,我们要考虑数字大于小于等于0的三种情况,接下来进行依次判断。

def transform_num(num,base):    #base是基数(也就是所要转化的进制)
    
    if num ==0:      #数值等于0的情况
       return "0"

    digits='0123456789ABCDEF'    
    result=''      #生成一个空字符用于储存之后生成的新字符
    is_negative=num <0
    num=abs(num)    #取绝对值再继续程序

    while num >0:      #数值大于0的情况
        remainder=num % base  
        result =digits[remainder]+ result   #将新字符放到最前面
        num=num // base   #得到的是数字除以基数之后的整数,用于之后继续判断。

    if is_negative :
        result="-" +result
    return result
print(transform_num(120,2))  # 输出:1111000(二进制)
print(transform_num(31, 14))   # 输出:23(14进制)

对于数字大于0的情况来说,以十进制转二进制为例: remainder=num % base这段代码实现的是26 ÷ 2 = 13 ... 0 → 余数 0 就是二进制最低位,之后的余数都比这个余数要高位,应该放置在左边。

所有在撰写代码时,需要注意,while语句这部分很容易出错,文中代码部分将新生成的字符放在先前生成的字符之前,也就是从左往右依次是高位到低位的字符。

而如果写成result +=digits[remainder]  就会导致代码运行之后出现错误,因为这样写得到的是从最低位到最高位的字符串,最后还需要反转一次(就需要再添加一个反转函数,这个函数在小编上一篇文章中有详细提及,需要的话可以自行查看。)

总结:

这段代码做的事就像是:

不断把数字除以你想要的进制(base),取每次的“余数”作为结果的每一位,直到除完为止,最后把这些“余数”反过来拼起来。

五、本文小结

  1. Python 字典的基础概念与操作方法;

  2. 如何使用字典进行字符频次统计;

  3. 重点:实现一个支持 2~16 任意进制转换的十进制转换函数

这些内容在日常开发中非常实用,字典作为 Python 中最常用的数据结构之一,灵活性极强,建议大家多加练习,例如用来处理词频、分类计数、缓存数据等。尤其是在处理数据、构建基础工具函数时尤为重要。无论是刷题、写项目,还是面试准备,这些知识点都可以帮你打下坚实基础。

如果你对其他 Python 知识点也感兴趣,如列表推导式、集合操作、数据处理库 pandas 的使用,欢迎留言交流!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值