定时功能

2024-03-05

警告,这有点递归;)

我回答了这个问题:Python:如何获取列表中最长元素之前的所有元素? https://stackoverflow.com/questions/8740018/pythonhow-can-i-get-all-the-elements-in-a-list-before-the-longest-element/8740093

在我提交了另一个应该更快的答案之后(作者认为,我也是如此)。我尝试对不同的解决方案进行计时,但应该较慢的解决方案实际上更快。这让我觉得我的代码有问题。或者是吗?

import string
import random
import time

def solution1(lst):
  return lst[:lst.index(max(lst, key=len))]

def solution2(lst):
  idx, maxLenStr = max(enumerate(lst), key=lambda x:len(x[1]))
  return lst[:idx]

# Create a 100000 elements long list that contains
# random data and random element length
lst = []
for i in range(100000):
  s = "".join([random.choice(string.letters+string.digits) for x in range(1, random.randint(1,50))])
  lst.append(s)

# Time the first solution
start = time.time()
solution1(lst)
print 'Time for solution1', (time.time() - start)

# Time the second solution
start = time.time()
solution2(lst)
print 'Time for solution2', (time.time() - start)

Update

在有人提到我为什么把它作为一个新问题之前。问题更多是关于我学习如何测量执行时间......


第二种解决方案中 lambda 的成本更高。

我分析了代码和配置文件数据,看起来第一个解决方案更快

As the wiki http://wiki.python.org/moin/PythonSpeed/PerformanceTips#Re-map_Functions_at_runtime会说函数调用成本高昂,在第二个解决方案中,lambda 和 len 函数调用使其运行速度变慢

请注意,我已将列表的长度缩减为 1000 个元素

>>> cProfile.run('solution1(lst)')
         5 function calls in 0.000 CPU seconds

   Ordered by: standard name

   ncalls  tottime  percall  cumtime  percall filename:lineno(function)
        1    0.000    0.000    0.000    0.000 <pyshell#305>:1(solution1)
        1    0.000    0.000    0.000    0.000 <string>:1(<module>)
        1    0.000    0.000    0.000    0.000 {max}
        1    0.000    0.000    0.000    0.000 {method 'disable' of '_lsprof.Profiler' objects}
        1    0.000    0.000    0.000    0.000 {method 'index' of 'list' objects}


>>> cProfile.run('solution2(lst)')
         2004 function calls in 0.012 CPU seconds

   Ordered by: standard name

   ncalls  tottime  percall  cumtime  percall filename:lineno(function)
        1    0.000    0.000    0.012    0.012 <pyshell#306>:1(solution2)
     1000    0.006    0.000    0.009    0.000 <pyshell#306>:2(<lambda>)
        1    0.000    0.000    0.012    0.012 <string>:1(<module>)
     1000    0.003    0.000    0.003    0.000 {len}
        1    0.003    0.003    0.012    0.012 {max}
        1    0.000    0.000    0.000    0.000 {method 'disable' of '_lsprof.Profiler' objects}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

定时功能 的相关文章

随机推荐

  • Terraform:添加单个规则时,所有安全组规则都会被销毁并替换

    地形信息 地形 v0 12 18 提供商 aws v2 43 0 提供者 模板 v2 1 2 我定义了一个安全组 如果我跑terraform plan or terraform apply与我现有的堆栈相比 没有任何待处理的更改 状态完全是
  • 使用 EF、存储库、实体清理解决方案(项目)结构

    我喜欢保持项目的结构尽可能干净 样本 BlogApp sln BlogApp Data BlogModel edmx the EF mappings Post cs I end up having partial classes in he
  • EL表达式语言中的instanceof检查

    有没有办法执行instanceof入住 EL 吗 E g
  • 如何用刻度线包裹 D3 标签

    我正在尝试让我的标签正确包装 我需要使刻度线和标签相匹配 我正在对标签使用换行功能 但无法使其与 tspan 一起使用 工作演示 https codesandbox io s react d3 pie chart forked nhh85
  • 为什么使用 SimpleDateFormat 时出现 ParseException [重复]

    这个问题在这里已经有答案了 我用eclipse写了下面的代码 String d 2014 6 1 21 05 36 SimpleDateFormat sdf new SimpleDateFormat yyyy MM dd HH mm ss
  • MySQL 中的条件内连接语句

    有没有一种方法可以根据另一个表中字段的值有条件地更改我要内部联接的表 这是我到目前为止得到的 但它是错误的 SELECT j jobID j jobNumber CASE WHEN j idType dealership THEN d de
  • GCD:如何更改计时器触发间隔

    无论如何 这听起来可能是一个新手问题 我对 GCD 很陌生 我有以下代码 int interval 2 int leeway 0 dispatch queue t queue dispatch get global queue DISPAT
  • Scrapy 抓取 div 具有多个类?

    我正在尝试使用 产品 类来获取 div 问题是 一些具有 product 类的 div 也具有 product small 类 所以当我使用xpath div class product 它仅捕获具有一个类的 div 而不捕获多个类的 di
  • 使用 PowerShell 对文件进行 AES 加密

    我能够使用此脚本成功对文件进行 AES 加密here https gallery technet microsoft com EncryptDecrypt files use 65e7ae5d file 165403 14 使用 Windo
  • 通过 Python 更改 Konsole 标题

    如何更改 Python 中的 Konsole 标题 我找到了这段代码 gt gt gt import sys gt gt gt sys stdout write x1b 2 test x07 但它仅适用于 Gnome 终端 不适用于 Kon
  • 如何从 C# 执行批处理文件?

    解决方案见文末 我不认为这会很难 我有一个命令文件 da cmd 其中包含 copy b d 7zS sfx d config txt d files 7z d setup exe 但 C 的这些行不会执行它 Process Start d
  • 更改 pdf 和非 Google 文档(EDU 域)的 acl

    我在尝试从 Google Apps 脚本 Google Apps for Education 更改文件所有权时收到此错误 GDataServiceException您尚无法更改该项目的所有者 我们正在努力 相同的代码适用于 Google A
  • 如何在mysql中存储类型可以是数字、日期或字符串的数据

    我们正在开发一个监控系统 在我们的系统中 值是由运行在不同服务器上的代理报告的 报告的观察结果可以是如下值 一个数值 例如 CPU USAGE 55 表示 55 的 CPU 处于使用状态 使用 某些事件被解雇 例如 备份完成 状态 例如SQ
  • PHP 中 preg_replace() 的字符串的最大长度?

    我发现如果我尝试在很长的字符串上使用 preg replace PHP 会向我的浏览器返回一个空页面 而不显示错误消息 我能够在我的测试环境中重现这个错误 preg replace 可以处理的字符串的最大长度是多少 是否可以增加这个长度 对
  • Firestore 查询 - 一对多关系

    我将开发 Android 移动应用程序并使用 Firebase 作为后端 我是 NoSql Firestore 的新手 在我的应用程序中 用户有很多主题 一个主题有很多帖子 帖子有很多评论和一张图片 用户也有很多追随者 在这种情况下 我如何
  • C# 4.0:将动态转换为静态

    这是一个与我问的另一个问题相关的分支问题here https stackoverflow com questions 2783616 net 4 0 dynamic object used statically 我将其分开 因为这实际上是一
  • Visual Studio 第一次启动需要很长时间

    我在 Windows 7 64 位计算机 RAM 为 6 GB 上下载并安装了 Visual Studio 2013 Profession Trial 但是 当我第一次启动它时 它说 我们正在准备就绪 感谢您的耐心等待 它已经持续了大约一个
  • 无框架的 C++ GUI

    据我了解 没有办法让 C GUI 设计器将您的应用程序作为一个独立的可执行文件发布 所有 3rd 方框架都以 dll s 等形式添加依赖项 无论是 MFC Qt WTL wxWidgets GTK 这让我只剩下一种解决方案 使用 Win32
  • 为什么八进制序列 '\0101' 不等于十进制 65?

    考虑这个 C 程序 unsigned char c2 0101 printf c d n c2 c2 我相信输出应该是 A 65但实际输出是1 49 推理 字符常量中以 0 作为前缀 声明为八进制格式 而 101 的八进制值为 65 那么
  • 定时功能

    警告 这有点递归 我回答了这个问题 Python 如何获取列表中最长元素之前的所有元素 https stackoverflow com questions 8740018 pythonhow can i get all the elemen