最新要闻
- 《流浪地球2》笨笨、门门设计稿公布 网友:别忘了MOSS
- 特斯拉股价2个月翻倍 马斯克有望夺回首富:只差400亿
- 天天速递!安卓14第一版正式发布 国产机泛滥的功能终于有了
- 买车送游戏机 丰田展示任天堂涂装版“大汉兰达”:内置大屏
- 最新资讯:好货不等人!森马官方清仓:春季高帮厚底板鞋79元大促(减190元)
- 日本独居长臂猿生娃动物园排查其情史:与“邻居”通过9毫米小孔交配
- 三句话惹生气?百度PLATO大火 网友:智能抬杠机器人
- 25%高增速:长城汽车2023年冲刺160万辆
- 星际飞船点火测试成功 马斯克预言:人类10年内登上火星
- 全球今热点:9.98万起真香 新款比亚迪秦PLUS DM-i上市 网友:不给合资留活路
- 重庆将为18万在校女学生免费接种HPV疫苗:全面预防宫颈癌
- 快资讯丨全球首创双枪充电!比亚迪赵长江:腾势D9纯电版20日左右交付
- 新消息丨做国内第一!深圳拼了:全市5G网速平均必500Mbps 上行下载更狠
- 全球球精选!你退了吗?网易已为超112万暴雪国服玩家退款
- 里程碑!ChatGPT参加美执业医师资格考试成绩合格 研究者:出了名的难
- 全球速看:雷军:小米汽车研发团队已超2300人 明年年一季度量产
手机
iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
- 警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- 男子被关545天申国赔:获赔18万多 驳回精神抚慰金
- 3天内26名本土感染者,辽宁确诊人数已超安徽
- 广西柳州一男子因纠纷杀害三人后自首
- 洱海坠机4名机组人员被批准为烈士 数千干部群众悼念
家电
头条:5个python中编程的大坑
对于Python新手来说,写代码很少考虑代码的效率和简洁性,因此容易造成代码冗长、执行慢,这些都是需要改进的地方。本文是想通过几个案列给新手一点启发,怎样写python代码更优雅。
大坑一:不喜欢使用高级数据结构
1.sets(集合)
很多新手忽视sets(集合)和tuple(元组)的强大之处
例如,取两个列表交集:
(相关资料图)
def common_elements(list1, list2): common = [] for item1 in list1: if item1 in list2: common.append( item1 ) 、 return common
这样写会更好:
def common_elements(list1, list2): common = set(list1).intersection(set(list2)) return list(common)
2.dic(字典)
新手枚举(访问和取出)字典的键和对应值,认为对应值必须通过键来访问,往往会这样做:
my_dict = {"a":1,"b":2}for key in my_dict: print(key, my_dict[key])
有一个更优雅的方法可以实现:
my_dict = {"a":1,"b":2} for key, value in my_dict.items(): print(key, value)
对大部分项目来说,这样写会更加有效率。
3.tuple(元组)
元组一旦创建就无法更改元素,看似没有什么用处,其实元组的作用大着呢!很多函数方法都会返回元组,比如enumerate()和dict.items(),并且可以在函数中使用元组,返回多个值。还能够很方便地从元组中提取信息:
a,b = ("cat","dog")
上面元组中有两个元素,分别被赋给a,b。如果有多个值,同样可以提取:
a,b,c = ("cat","dog","tiger")print(a,b,c)
提取首、尾两个元素:
first,*_,end = (1,2,3,4,5,6)print(first,end)# 输出:1、6
提取首、中、尾三部分:
first,*middle,end = (1,2,3,4,5,6)print(first,middle,end)# 输出:1、[2, 3, 4, 5]、6
元组还可以用来交换变量:
(a,b,c) = (c,a,b)
上面a变成之前的c,b变成之前的a,c变成之前的b
元组也能作为字典的键,所以如果你需要存储数据,可以使用带有元组键的字典,比如说经纬度数据。
大坑二:不喜欢使用上下文管理器
新手可能会习惯这样进行读取文件操作:
if os.path.exists(data_file_path): data_file = open(data_file_path,"r")else: raise OSERRORprint( data_file.read())data.close()
这样写会有几个明显的问题:
- 可能出现文件存在,但文件被占用,无法读取的情况
- 可能出现文件可以被读取,但操作文件对象出现报错的情况
- 可能出现忘记关闭文件的情况
如果使用with...语句,问题就迎刃而解了:
with open(data_file_path,"r") as data_file: print(data_file.read)
这样可以捕获任何打开文件或处理数据时的异常情况,并且在任务处理完后自动关闭文件。
python初学者可能不太了解上下文管理器的神奇之处,它真的能带来巨大的便利。
大坑三:不喜欢使用标准库
标准库itertools和collections仍然很少被初学者使用
itertools
如果你看到下面的任务:
list1 = range(1,10)list2 = range(10,20)for item1 in list1: for item2 in list1: print(item1*item2)
这是一个嵌套循环操作,为提高代码效率,完全可以用product()函数替代嵌套循环:
from itertools import productlist1 = range(1,10)list2 = range(10,20)for item1,item2 in product(list1, list2): print(item1*item2)
这两段代码的结果完全一样,但使用标准库函数明显更加简洁高效。itertools还有很多方便操作迭代对象的函数,比如:
- count()函数会创建一个无限迭代器
- cycle()函数会把传入的序列无限重复下去
- chain()可以把多个迭代对象串联起来
- group()函数可以把迭代其中相邻的重复元素挑出来,放在一起......
有兴趣可以详细看看itertools库的各种神奇函数
collections
新手对python集合模块了解的可能并不多,你可能会遇到这样的情形:
consolidated_list = [("a",1),("b",2),("c",3),("b",4)]items_by_id = {}for id_, item in consolidated_list: if id_ not in items_by_id: items_by_id[id_] = [] if id_ in items_by_id: items_by_id[id_].append(item)
上面代码构建了一个字典,依次向字典中添加信息,如果某个键已经存在,则以某种方式修改该键的值;如果某个键不存在,则添加对应键值对。
这种算法非常常见,你可以用collects模块的defaultdict()函数来实现同样效果:
from collections import defaultdict items_by_id = defaultdict(list)consolidated_list = [("a",1),("b",2),("c",3),("b",4)]for id_, item in consolidated_list: items_by_id[id_].append(item)
在此列中,defaultdict()接受一个list作为参数,当键不存在时,则返回一个空列表作为对应值。
有时候我们会遇到统计词频的案例,比如:
# 统计词频colors = ["red", "blue", "red", "green", "blue", "blue"]result = {}for color in colors: if result.get(color)==None: result[color]=1 else: result[color]+=1print (result)# 输出 {"red": 2, "blue": 3, "green": 1}
完全可以用defaultdict()函数实现上面的计数功能:
colors = ["red", "blue", "red", "green", "blue", "blue"]d = defaultdict(int)for color in colors: d[color] += 1print(d) #学习中遇到问题没人解答?小编创建了一个Python学习交流群:711312441
更简单的方法用collections模块的Counter()函数:
from collections import Countercolors = ["red", "blue", "red", "green", "blue", "blue"]c = Counter(colors)print (dict(c))
对于备份文件,新人往往会用system模块:
from os import systemsystem("xcopy e:\\sample.csv e:\\newfile\\")
其实shutil模块更好用:
import shutilshutil.copyfile("E:\\q.csv", "e:\\movie\\q.csv")
因为shutil会很详细地报告错误和异常。
大坑四:不喜欢使用异常处理
无论老手新手都应该在写代码的时候进行异常处理操作,这样可以使代码更加健壮。异常处理一般会用try...except语句
大坑五:不喜欢使用生成器
除非你的list十分复杂,并且频繁调用,否则都建议使用生成器,因为它非常节省内存,举个例子:
def powers_of_two(max=20000): i = 0 powers = [] while 2**i < max: powers.append[2**i] i += 1 return powers
对于使用次数少、占据大量内存、且容易生成的数据,可以用生成器替代列表存储:
from itertools import count, takewhiledef powers_of_two(max=20000): for index in takewhile(lambda i: 2**i < max, count(start=0)): yield 2**index
头条:5个python中编程的大坑
《流浪地球2》笨笨、门门设计稿公布 网友:别忘了MOSS
特斯拉股价2个月翻倍 马斯克有望夺回首富:只差400亿
天天速递!安卓14第一版正式发布 国产机泛滥的功能终于有了
世界观察:网易一面:select分页要调优100倍,说说你的思路?(内含Mysql的36军规)
买车送游戏机 丰田展示任天堂涂装版“大汉兰达”:内置大屏
最新资讯:好货不等人!森马官方清仓:春季高帮厚底板鞋79元大促(减190元)
每日快报!【踩坑日记】nginx server_name配置多域名的坑
日本独居长臂猿生娃动物园排查其情史:与“邻居”通过9毫米小孔交配
三句话惹生气?百度PLATO大火 网友:智能抬杠机器人
25%高增速:长城汽车2023年冲刺160万辆
星际飞船点火测试成功 马斯克预言:人类10年内登上火星
全球看点:对ChatGPT的几个提问,当码农小帮手可行
环球今日讯!状态模式
全球今热点:9.98万起真香 新款比亚迪秦PLUS DM-i上市 网友:不给合资留活路
LOJ 3395 集训队作业 Yet Another Permutation Problem 题解 (生成函数技巧)
重庆将为18万在校女学生免费接种HPV疫苗:全面预防宫颈癌
快资讯丨全球首创双枪充电!比亚迪赵长江:腾势D9纯电版20日左右交付
新消息丨做国内第一!深圳拼了:全市5G网速平均必500Mbps 上行下载更狠
全球球精选!你退了吗?网易已为超112万暴雪国服玩家退款
焦点快播:chatGPT接入个人微信(国内可用)
里程碑!ChatGPT参加美执业医师资格考试成绩合格 研究者:出了名的难
全球速看:雷军:小米汽车研发团队已超2300人 明年年一季度量产
最新快讯!真维斯官旗抄底:100%纯棉T恤4件99元包邮
2、如何验证是否存在CDN?
上天入海!我国最新研发飞行器“同济飞鱼”:可实现水陆两栖
ChatGPT或导致20种工作失业?远远不止 比尔盖茨:ChatGPT将改变世界
14不用管!小米小顽智能全自动猫砂盆预售:1399元
天天动态:Java8函数式编程读后总结与感想
新消息丨利用微PE制作官方最新纯净系统
【天天快播报】首富想干啥?马斯克公司遭调查:涉嫌非法运输危险病原体
全球热议:eSIM终于等来出头之日
5人将苹果翻新机当正品卖:赚到1.16亿!最终获刑
当前速递!80后、90后的“死去的回忆”:都完整保存在这里
当前热门:《原神》国外配音演员龌龊劣迹被锤:涉嫌骚扰未成年粉丝
环球百事通!【垃圾回收】v8引擎垃圾回收策略
世界快资讯:大爷大妈景区爬松树站树顶拍照 景区称出事不负责!网友被吓到
小白也能做应用(三)之fusion app远程更新及免登录
环球热文:kx00016-顺序表--用C语言实现:多种方法合并2个非递减顺序表
2月87款国产游戏获批版号:腾讯、网易新游来了
python之路68 drf从入门到成神 9 drf_jwt源码执行流程、自定义用户表签发和认证、simpleui的使用、权限控制(acl、rbac)
每日关注!导出域用户hash姿势总结
世界滚动:readelf命令读取elf文件的详细信息
再不用装一堆软件了!Windows 11可原生控制RGB信仰灯
天天热头条丨西安最倒霉面馆顾客暴涨员工数翻4倍 很多人慕名而来:感谢大家照顾
每日热门:56.函数模板
热门看点:学习打卡01- java入门
通讯!男子躲查酒驾3次跳河 血检结果却为0!结果令人舒适
流畅度飙升!小米:MIUI 14第一批正式版机型已全量推送
开了比亚迪之后 男子直呼不会开油车了:跟老人机一样
【当前独家】配1200W永磁同步电机!宗申TL3两轮版上市:可载重300公斤
世界快消息!别以为老师看不出来ChatGPT生成的论文!网友:你什么水平老师心里有数
世界热头条丨基于声网互动白板实现一个多人数独游戏
当前最新:学习笔记——尚好房项目(配置ssm环境、测试ssm环境)
《Towards Cooperation in Sequential Prisoner’s Dilemmas: a Deep Multiagent Reinfo
世界滚动:R机器学习:重复抽样在机器学习模型建立过程中的地位理解
【世界聚看点】火狐浏览器国内最受欢迎的扩展出炉:ABP等神级工具没入围
真相令人大跌眼镜!研究称莫奈印象派画风实则是雾霾
焦点要闻:土耳其地震“震出”隐秘地层:覆盖地球的44%、颠覆板块运动
今日最新!女子应聘财务被要求给五六人煮饭 负责人:吃饭不方便 可以不煮
多色多款 杰克琼斯卫衣89元包邮:低至1.3折清仓
项目终于用上了低代码,才知道为什么真香了!
机器学习-PCA
天天热消息:kx00015-顺序表--用C语言实现:删除顺序表中元素值等于x的所有元素
精彩看点:批处理脚本教程_编程入门自学教程_菜鸟教程-免费教程分享
vuex相关笔记
最新消息:realme 10 Pro可口可乐版发布:骁龙695 背壳logo爱了
【世界热闻】微信、微博全部断更!老干妈回应“退网”:经营一切正常
当前讯息:1TB版本太香了 真我GT Neo5供不应求 徐起:会加紧拧螺丝
焦点滚动:零添加:太太乐900ml*2瓶酱油最低26.4元
美少女手游《妮姬:胜利女神》即将推出PC版 推荐配置1650S
【全球聚看点】C#教程_编程入门自学教程_菜鸟教程-免费教程分享
环球时讯:【网关开发】8.Openresty 网关自定义健康检查的设计与实现
每日焦点!【0基础学爬虫】爬虫基础之爬虫的基本介绍
记录--千万别让 console.log 上生产!用 Performance 和 Memory 告诉你为什么
省选集训2023年2月9日T2
全球热讯:非油炸!吃欢天荞麦面皮10袋到手19.9元:麻酱、酸辣随便挑
世界今热点:ChatGPT版必应被华人小哥攻破:一句话“催眠”问出所有Prompt
世界热门:钙钛矿-硅光伏电池效率突破30%!可稳定工作30年
世界即时:公交车刹车提醒是2B请注意 当地回应:考虑不周将“改名”
环球热议:苹果忍不住反驳乔布斯女儿吐槽:iPhone 14比iPhone 13 Pro还要好
Entity Framework 教程_编程入门自学教程_菜鸟教程-免费教程分享
全球热文:【Spring】Bean注册注解
【当前独家】算法学习笔记(17): 快速傅里叶变换(FFT)
世界要闻:化繁为简|AIRIOT智慧水务信息化建设解决方案
环球资讯:让地球“流浪”前 先来研究下这一个更现实的威胁
女子疑吃自热火锅去世:不排除急性中毒、家属索赔176万元
当前消息!最香的i9+RTX 4080游戏本!ROG枪神7超竞版仅需18999元起
全球热讯:泰国1月份纯电动车上牌量排行:比亚迪称王、国产车霸榜
GTX 1060落魄了?《原子之心》1080P高画质需GTX 1080
环球关注:一步一腳印的 iOS App 上架和更新流程
当前快看:学习笔记——尚好房项目(项目介绍、环境搭建、配置依赖关系)
[数据结构] 二叉树的层次遍历
全球实时:JVM sandbox 实现热修复示例
《流浪地球2》全球爆火背后!《三体》导演:中国科幻的内核是文化自信
神十五航天员首次出舱视频公布:和地球同框 绝美
每日速看!方向盘助力失灵、AEB抽风!车主:百年凯迪拉克毁于LYRIQ 绝望
速递!Android 14来了:提升续航和流畅度
《狂飙》片头被指抄袭 网友放对比照跟国外一电影太相似:背后公司被扒
环球资讯:剖析字节案例,火山引擎 A/B 测试 DataTester 如何“嵌入”技术研发流程