当前位置: 首页 > news >正文

python高效试用17---两个字符串组成一个新的字符串和两个字符串组成元组作为key哪个更高效

在 Python 中,使用字符串连接 (str1 + str2) 作为 key 和使用元组 ((str1, str2)) 作为 key 的效率差异,主要受以下因素影响:

哈希计算速度:

字符串连接 (str1 + str2):会创建一个新的字符串对象,并计算哈希值。
元组 ((str1, str2)):元组的哈希值是基于内部元素的哈希值计算的,不会创建新的字符串对象。
存储和查找性能:

字符串连接:需要额外的内存来存储新创建的字符串,并且哈希计算可能稍慢。
元组:由于 Python 内部对元组的哈希计算进行了优化,通常会更高效。

在这里插入图片描述
测试代码:

import time
import random
import string
from pyecharts import options as opts
from pyecharts.charts import Bar


def generate_random_string(length):
    return ''.join(random.choices(string.ascii_letters, k=length))


def test_dict_key_efficiency(str_lengths, n_times=10000):
    results = []

    for length in str_lengths:
        str1 = generate_random_string(length)
        str2 = generate_random_string(length)
        dict_str = {}
        dict_tuple = {}

        # 测试字符串拼接作为 key
        start = time.perf_counter()
        for _ in range(n_times):
            key = str1 + str2
            dict_str[key] = _
        str_time = time.perf_counter() - start

        # 测试元组作为 key
        start = time.perf_counter()
        for _ in range(n_times):
            key = (str1, str2)
            dict_tuple[key] = _
        tuple_time = time.perf_counter() - start

        results.append((length, str_time, tuple_time))

    return results


# 设置字符串长度列表
str_lengths = [5, 10, 15, 20]
results = test_dict_key_efficiency(str_lengths)

# 提取数据进行可视化
x_labels = [f"{length} chars" for length, _, _ in results]
y_str_times = [round(str_time,6) for _, str_time, _ in results]
y_tuple_times = [round(tuple_time,6) for _, _, tuple_time in results]

bar = (
    Bar()
    .add_xaxis(x_labels)
    .add_yaxis("字符串拼接", y_str_times)
    .add_yaxis("元组", y_tuple_times)
    .set_global_opts(title_opts=opts.TitleOpts(title="字典 Key 访问时间对比"))
)

bar.render("key_efficiency_comparison.html")

相关文章:

  • STM32 HAL库 CAN过滤器配置
  • 【网络编程】原始套接字编程
  • 【UI自动化框架第五张】AndroidUiAutomation 类功能简介
  • deepseek R1提供的3d迷宫设计方案
  • freeswitch(多台服务器级联)
  • 文件和异常
  • 串口通信ASCII码转16进制及C#串口编程完整源码下载
  • Dify平台部署全记录
  • Redis--Set类型
  • Zabbix 7.2 + Grafana 中文全自动安装ISO镜像
  • mysql的binlog,redolog,undolog作用
  • 架构师面试(十四):注册中心设计
  • ICLESCTF-web-misc-wp
  • 小程序配置webview
  • 用栈实现队列 用队列实现栈
  • 《Windows 文件命名规则与 Python 日志文件生成技巧》
  • . 从理论到实践:小红书、京东如何玩转大模型
  • Go Ebiten小游戏开发:俄罗斯方块
  • 【Linux网络(一)】初识网络
  • 使用外挂工具,在教师资格面试抽题系统中自动填入身份证号
  • 网站系统管理计划/广州网络运营课程培训班
  • 国际网站建设的目的/百度快照客服
  • 怎么快速建动态网站/网络营销软件下载
  • dw代码做网站/百度seo详解
  • 宁波有名的外贸公司/求职seo服务
  • 网站建设需要什么软件/百度销售系统