Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Python新建序列,怎么写更快

Python新建序列,怎么写更快

作者头像
Crossin先生
发布于 2024-02-26 13:26:29
发布于 2024-02-26 13:26:29
30600
代码可运行
举报
运行总次数:0
代码可运行

大家好,欢迎来到 Crossin的编程教室~

一组1000万个0~100的整数序列,用它来生成一个新的序列,要求如果原本序列中是奇数就不变,如果是偶数就变成原来的一半。

你会怎么写?

来看几份参考答案:

青铜:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def for_method(data):
    result = []
    for x in data:
        if x % 2 == 0:
            result.append(x // 2)
        else:
            result.append(x)
    return result

(自测耗时:0.95秒)

新建一个空列表,for循环遍历原列表,依次判断每个元素,如果能被2整除就除以2添加进新列表,否则直接添加进新列表。

白银:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def lc_method(data):
    return [x if x % 2 else x // 2 for x in data]

(自测耗时:0.75秒)

通过列表解析式生成新列表,不仅代码更简洁明了,耗时还变少了。

黄金:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def numpy_method(data):
    arr = np.array(data)
    return np.where(arr % 2 == 0, arr // 2, arr).tolist()

(自测耗时:0.90秒)

用numpy的where方法生成新的数组。看起来效率好像还不如列表解析式嘛?这是因为大部分时间都花在了列表和ndarray的转换上。如果这组序列本身就用numpy的数组来存储的话:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def numpy_array_method(data):
    return np.where(data % 2 == 0, data // 2, data)

(自测耗时:0.32秒)

速度直接碾压列表解析式。

王者:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@numba.jit(nopython=True)
def numba_method(data):
    result = np.copy(data)
    for i in range(len(data)):
        if result[i] % 2 == 0:
            result[i] //= 2
    return result

(自测耗时:0.65秒)

还是用for循环,不过给函数加上一个装饰器,表示用Numba JIT编译,这个看起来平平无奇的写法会有什么效果呢?好像也没有比直接用numpy快多少嘛?

别急,让我们加大剂量,把序列长度调整到1亿,优势就体现出来了。(numba:1.21秒 vs numpy:3.04秒)

你还有其他写法吗?

作者:Crossin的编程教室

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-02-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Crossin的编程教室 微信公众号,前往查看

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

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
nextcloud性能调优
默认的nextcloud是Apache web, 我们将其换为nginx,通过搭配nextcloud-fpm和nginx两个docker完成。
羽翰尘
2019/11/20
9.2K1
记一次 Laradock 定时任务不执行的教训
seth-shi
2023/12/18
3600
Fresns 宝塔面板配置教程
为了兼顾 MySQL 5.7 版本,所以主程序中默认为 utf8mb4_unicode_520_ci 排序规则,当 .env 文件中未配置排序规则时,主程序使用默认项;如果你使用 utf8mb4_0900_ai_ci 或者其他排序规则,请在 .env 文件中新增配置项定义新规则。
西里国际站
2023/08/23
4760
Fresns 宝塔面板配置教程
利用定时任务实现宝塔面板随机密码
最近宝塔面板的登陆地址被人扫出来了,于是好多奇奇怪怪的人尝试登陆服务器。为了防止宝塔的密码被人爆破出来,想出来了这个骚操作,大概原理就是利用定时任务来定时修改宝塔面板的密码...够骚吧。
用砖头敲代码
2022/08/30
3120
利用定时任务实现宝塔面板随机密码
大概思路就是先写一个 shell 脚本来修改密码,然后打开宝塔面板的计划任务,任务类型选择 shell 脚本,任务名称与周期自定义,将自己修改好的代码复制到脚本内容即可。
用户7146828
2021/08/09
4970
linux crontab定时任务命令详解
何为定时任务,简单的理解就是设置一个程序在某个时刻执行某个我们预先设定好的事情。就好比我们的闹钟一样,设置在某个具体的时间点进行闹铃。我们的windows系统可以实现定时任务(可以使用是视图化,也可以使用我们的dos命令中执行),同样的linux系统也可以实现这样的任务。今天主要给大家分享的便是linux系统利用crontab实现定时任务。
兔云小新LM
2020/05/19
9950
Linux中Crontab(定时任务)命令详解及使用教程
Crontab介绍: Linux crontab是用来crontab命令常见于Unix和类Unix的操作系统之中,用于设置周期性被执行的指令。该命令从标准输入设备读取指令,并将其存放于“crontab”文件中,以供之后读取和执行。该词来源于希腊语 chronos(χρ?νο?),原意是时间。通常,crontab储存的指令被守护进程激活, crond常常在后台运行,每一分钟检查是否有预定的作业需要执行。这类作业一般称为cron jobs。当安装完成操作系统之后,默认便会启动此任务调度命令。crond 命令每分锺会定期检查是否有要执行的工作,如果有要执行的工作便会自动执行该工作。 注意:新创建的 cron 任务,不会马上执行,至少要过 2 分钟后才可以,当然你可以重启 cron 来马上执行。
天乐404
2023/11/16
7.1K0
Linux中Crontab(定时任务)命令详解及使用教程
Linux命令之Crontab——定时任务
rontab命令被用来提交和管理用户的需要周期性执行的任务,与windows下的计划任务类似,当安装完成操作系统后,默认会安装此服务工具,并且会自动启动crond进程,crond进程每分钟会定期检查是否有要执行的任务,如果有要执行的任务,则自动执行该任务。
浩Coding
2020/03/04
1.3K0
linux基础命令介绍十四:定时任务
在计算机的使用过程中,经常会有一些计划中的任务需要在将来的某个时间执行,linux中提供了一些方法来设定定时任务。
用户5030870
2019/04/11
1.4K0
crontab--定时任务
cron:计划任务,是任务在约定的时间执行已经计划好的工作,这是表面的意思。在Linux中,我们经常用到 cron 服务器来完成这项工作。cron服务器可以根据配置文件约定的时间来执行特定的任务。
cultureSun
2023/05/18
4000
crontab--定时任务
linux定时任务
图为某系统默认的定时任务,可看出,根据不同的任务规则,执行了不同的任务,里面的配置大概分为以下几种:
仙士可
2019/12/18
14.4K0
PHP实现执行定时任务的几种思路详解
我们先从相对比较复杂的服务器执行php谈起。服务器上安装了php,就可以执行php文件,无论是否安装了nginx或Apache这样的服务器环境软件。而Linux中,使用命令行,用CronTab来定时任务,又是绝佳的选择,而且也是效率最高的选择。
全栈程序员站长
2022/07/07
1.1K0
Linux-使用cron执行定时任务
cron在linux中主要用于处理定时任务, 分为crond和crontab.crond主要用于系统进程, 而我们主要使用crontab
打铁读书郎
2024/04/11
8260
Spring Boot 整合定时任务,可以动态编辑的定时任务!
定时任务,松哥之前写过多篇文章和大家介绍,上次还自己 DIY 了一个可以动态编辑的定时任务,还录了一个配套视频: 相关的资料链接戳这里: Spring 定时任务玩出花! 手把手教你定制可编辑的定时任务! 开发可配置的定时任务~第二弹 Vue非典型用法,一个简单的管理页面 不过我们当时自己写的这个不支持分布式环境,想要支持倒也不是啥难事,弄一个 zookeeper 或者 redis 作为公共的信息中心,里边记录了定时任务的各种运行情况,有了这个就能支持分布式环境了。 今天咱们不自己写了,我们来看一个现成的框
江南一点雨
2022/03/10
7130
Linux中常见问题(磁盘 定时任务)
根据文章内容总结的摘要
惨绿少年
2017/12/27
9330
宝塔面板+腾讯云轻量应用服务器部署fiora聊天室
fiora 是一款有趣的开源聊天应用. 基于 node.js, mongodb, react 和 socket.io 等技术开发,可以克隆源码并部署到自己的服务器。下面就为大家介绍如何将fiora部署到自己的腾讯云轻量应用服务器
zuantou
2021/08/24
3.2K1
在Linux中宝塔面板的定时任务启动后如何结束
但是定时任务启动后,发现代码逻辑有点问题,并且任务一直在后台运行,所以我需要kill掉任务进程,接下来我就来说一下解决方法
用户1539053
2023/07/24
1.3K0
Linux之crontab定时任务
****前言**** 无论是做开发还是做运维的程序猿,crontab命令是必须用到的命令,特别是对于运维的人,自动化运维中,crontab也属于其一。然而就来记录常用的crontab定时处理命令。 ---- ****crontab简介**** 简而言之呢,crontab就是一个自定义定时器。 ---- ****crontab配置文件**** 其一:/var/spool/cron/ 该目录下存放的是每个用户(包括root)的crontab任务,文件名以用户名命名 其二:/etc/cron.d/ 这个目
AlicFeng
2018/06/08
2.5K0
At 、Crontabl定时任务
at 命令是用于一次的定时任务,使用起来十分简便,而且定时的日期多样化,注意其需要 atd 服务的支持
晚上没宵夜
2021/08/05
1.3K0
At 、Crontabl定时任务
循环执行定时任务crontab
小编最近在将线上服务器实时的请求都转到测试机,但是由于请求量太多导致log不久就写满磁盘了,手动清理费事费力,因此考虑到自动清理,接触到corntab定时任务。分享给各位。
用户5521279
2019/11/14
1.6K0
相关推荐
nextcloud性能调优
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验