分享 10 个超实用的 Python 编程技巧
作者 | 欣一
来源 | Python爱好者集中营
今天小编来给大家分享几个Python
的编程技巧,帮助你迅速完成地从小白到Python
大神的蜕变。
字典翻转
首先我们来看字典的翻转,假设我们有下面类似的一个字典对象与数据
car_dict = { "brand":"Tesla", "model": "Model Y", "year": 2017
}
倘若我们想要翻转字典当中的键值对,可以这么来做
d2 = {}
for k, v in car_dict.items():d2[v] = k
print(d2)
output
{'Tesla': 'brand', 'Model Y': 'model', 2017: 'year'}
结果的键值对就产生了对调,当然我们也还有更加简单的方法,代码如下
d3 = dict(map(reversed, car_dict.items()))
print(d3)
output
{'Tesla': 'brand', 'Model Y': 'model', 2017: 'year'}
lambda()
和map()
上面的代码当中用到了map()
方法,那小编这里就着重说说,map()
方法可以和lambda()
方法联用,代码如下
li = [5, 10, 22, 30, 50, 65, 70]
final_list = list(map(lambda x: x*2, li))
print(final_list)
output
[10, 20, 44, 60, 100, 130, 140]
我们先有lambda()
方法来定义一个函数,然后通过map()
方法映射到列表当中的每一个元素,最后仍然以列表的形式返回,
给列表当中的字典排序
有时候我们也需要根据特定的条件针对列表当中的字典排序,例如
dicts_lists = [ { "Name" : "Tony" , "Age" : 20, }, { "Name" : "May" , "Age" : 14, }, { "Name" : "Katy" , "Age" : 23, }
我们需要根据字典当中的“Age”字段来进行排序,代码如下
dicts_lists.sort(key=lambda x:x.get('Age'))
print(dicts_lists)
output
[{'Name': 'May', 'Age': 14}, {'Name': 'Tony', 'Age': 20}, {'Name': 'Katy', 'Age': 23}]
上面的结果是按照升序来进行排序的,要是我们需要其以降序的方式来排序,可以这么来做,代码如下
dicts_lists.sort(key=lambda x:x.get('Age'), reverse = True)
print(dicts_lists)
output
[{'Name': 'Katy', 'Age': 23}, {'Name': 'Tony', 'Age': 20}, {'Name': 'May', 'Age': 14}]
给列表当中的字符串排序
要是列表当中的都是字符串,而我们需要对其进行排序,该如何进行呢?例如
my_list = ["blue", "red", "green" ]
我们根据首字母在字母表当中的顺序来排的话,代码如下
my_list.sort()
print(my_list)
output
['blue', 'green', 'red']
要是我们根据其字符串的长度来进行排序的话,可以这么来做,代码如下
my_list = sorted(my_list, key=len)
print(my_list)
output
['red', 'blue', 'green']
根据别的列表来进行排序
有时候我们需要根据其他的列表来对本列表来一个排序,例如有下面这两个列表
a = ['blue', 'green', 'orange', 'purple', 'yellow']
b = [3, 2, 5, 4, 1]
我们根据列表“b”来对列表“a”进行排序,具体该怎么操作呢?代码如下
sorted_list = [v for _, v in sorted(dict(zip(b, a)).items(), key=lambda x:x[0])]
print(sorted_list)
output
['yellow', 'green', 'blue', 'purple', 'orange']
取出列表当中最大/最小的几个数
代码如下
import heapqscores = [1, 10, 11, 2, 5, 6]
print(heapq.nlargest(3, scores)) ## 最大的3个数
print(heapq.nsmallest(3, scores)) ## 最小的3个数
output
[11, 10, 6]
[1, 2, 5]
staticmethod()
函数
Python
当中的staticmethod()
函数可以将一个方法定义成类的静态方法,这样在调用的时候无需实例化,例如
class MyClass(object):@staticmethoddef print_name(name):print('My name is: ', name)
不需要实例化就可以使用,例如
MyClass.print_name("John")
MyClass.print_name("Mike")
output
My name is: John
My name is: Mike
当然也可以在实例化之后调用方法,例如
myclass = MyClass()
myclass.print_name("John")
output
My name is: John
classmethod
函数
classmethod
修饰符对应的函数也不需要被实例化,不需要self
参数,取而代之的是cls
参数用来调用类的属性、方法以及实例化对象
class MyClass(object):test1 = 1def func1(self):print('foo')@classmethoddef func2(cls):print('func2')print(cls.test1)cls().func1()
我们不需要实例化对象就可以调用func2()
方法,代码如下
MyClass.func2()
output
func2
1
foo
深拷贝和浅拷贝
相信有不少同学会在面试的时候被问到这个问题,小编就来聊聊这两者之间的区别。
浅拷贝指的是拷贝父对象,不会拷贝对象的内部的子对象,具体大家可以看下图,
b = a.copy()
,a
和b
是一个独立的对象,但他们的子对象还是指向统一对象(是引用),所以当a
发生了变换的时候,对应的b
也会发生变换,代码如下
a = [[1, 2, 3], [4, 3, 5]]
b = list(a) # 创建一个浅拷贝
a[0][0] = 'x'print(a)
print(b)
而深拷贝完全拷贝了父对象以及子对象,两者完全是独立的,因此当a
发生了变换的时候,不会影响到b
,
代码如下,不过深拷贝需要调用Python
内置的copy
模块
import copy
a = [[1, 2, 3], [4, 3, 5]]
b = copy.deepcopy(a)
a[0][0] = 'x'print(a)
print(b)
output
[['x', 2, 3], [4, 3, 5]]
[[1, 2, 3], [4, 3, 5]]
*args
和**kwargs
的区别
两者的区别在于*args
用来将参数打包成tuple
给函数体使用,如下
def function(*args):print(args, type(args))function(1, 2, 3)
output
(1, 2, 3) <class 'tuple'>
又如
def function(x, y, *args):print(x, y, args)function(1, 2, 3, 4, 5, 6)
output
1 2 (3, 4, 5, 6)
而**kwargs
打包关键字参数成dict
给函数体调用
def function(**kwargs):print(kwargs, type(kwargs))function(a=1)
output
{'a': 1} <class 'dict'>
但要是遇到args
、*args
以及**kwargs
三者同时使用的时候,顺序必须保持(arg
,*args
,**kwargs
)这个顺序
def function(arg,*args,**kwargs):print(arg,args,kwargs)function(10, 70, 70, 90, a=11, b=12, c=13)
output
10 (70, 70, 90) {'a': 11, 'b': 12, 'c': 13}
往
期
回
顾
技术
用技术实现时序羽毛球动作预测
资讯
AI在嘈杂环境中看唇语识别理解
技术
万粉博主推荐,调用AGanV2
资讯
GPT-3平替版语言模型,性能更优化
分享
点收藏
点点赞
点在看
相关文章:

百度编辑器(1.4.3—net版)上传图片路径及其他配置
1:文件配置图: 2:文件夹配置图: 3:多余的功能删除(懒人不想使用百度编辑器官网的自定义,而选择全部功能的直接下载,对于没用的功能可以注释掉,以后有需要就可以再拿出来用…

windows下配置redis集群,启动节点报错:createing server TCP listening socket *:7000:listen:Unknown error...
windows下配置redis集群,启动节点报错:createing server TCP listening socket *:7000:listen:Unknown error 学习了:https://blog.csdn.net/u014652744/article/details/71774171 竟然真的是需要bind 127.0.0.1 不同的机器为啥就不一样呢&am…

apache日志分析简介
对apache的日志分析做下简单的介绍,主要参考apache官网的Log Files,手册参照 http://httpd.apache.org/docs/2.2/logs.html一.日志分析 如果apache的安装时采用默认的配置,那么在/logs目录下就会生成两个文件,分别是access_log和error_log1.access_log access_log为访问日志,记…

Kotlin语法(基础)
一、基础语法: 1. 定义包名: 包名应该在源文件的最开头,包名不必和文件夹路径一致:源文件可以放在任意位置。 package my.demo 2. 定义函数: fun sum(a: Int , b: Int) : Int{return a b } 表达式函数体自动推断型的返…

未来十年,人机交互将是重要的发展
编译 | 禾木木出品 | AI科技大本营(ID:rgznai100)机器人市场包括广泛且不断扩大的产品范围。经过多年的合作,可以预测机器人技术和机器人行业的未来发展。根据需求,专业服务应用将占据主要市场份额。客户行为的变化已成为行业发展…

20170507Linux七周二次课 io监控free ps 网络状态 抓包
七周二次课(5月7日)10.6 监控io性能10.7 free命令10.8 ps命令10.9 查看网络状态10.10 linux下抓包扩展tcp三次握手四次挥手 http://www.doc88.com/p-9913773324388.htmltshark几个用法:http://www.aminglinux.com/bbs/thread-995-1-1.html监控…

navicat for mysql导出表结构
show create table cm_events;

《新程序员003》正式上市!华为、阿里等 30+ 公司的云原生及数字化实战经验...
作者 | 唐小引出品 | 《新程序员》编辑部《新程序员 003:云原生和全面数字化实践》图书今日正式上市,纸书和电子书同步上架 CSDN 商城、New 程序员小程序、京东、当当等平台。这是由 50 余位技术专家共同创作,写给所有关注云原生和数字化的开…

sed及awk显示指定行内容
文件内容为[roottest1 test]# cat file.test 1 2 3 4 5 6 7 8 9 101. 显示第二行内容(指定行)1)sed[roottest1 test]# sed -n 2p file.test 22)awk[roottest1 test]# awk NR2 {print $0} file.test 2 [roottest1 test]# awk {if(NR2)print $0} file.t…
win10 spark+scala+eclipse+sbt 安装配置
转载请务必注明原创地址为:http://dongkelun.com/2018/03/... 1、首先安装配置jdk1.8以上,建议全部的安装路径不要有空格 2、安装spark 2.1 下载 下载地址:http://spark.apache.org/downloads.html,我下载的是 spark-2.2.1-bin-hadoop2.7.tgz…

jquery的live方法
live(type, [data], fn)手册API的介绍 jQuery 给所有匹配的元素附加一个事件处理函数,即使这个元素是以后再添加进来的也有效。 如下用 live给classclickme的元素绑定一个click事件: $(.clickme).live(click, function() { alert("Live handler ca…

碱基序列的儿子最长上涨
Font Size:Aa Aa AaDescription 给出一个由n个数组成的序列x[1..n],找出它的最长单调上升子序列的长度。即找出最大的长度m和a1, a2……,am,使得 a1 < a2 < … … < am 且 x[a1] < x[a2] < … … < x[am]。Input 先输入一个整数t&…

用 Python 写 3D 游戏,太赞了
作者 | 可可卷CSDN博客 | 可可卷vizard介绍Vizard是一款虚拟现实开发平台软件,从开发至今已走过十个年头。它基于C/C,运用新近OpenGL拓展模块开发出的高性能图形引擎。当运用Python语言执行开发时,Vizard同时自动将编写的程式转换为字节码抽象…

人人都能学会的python编程教程3:字符串和编码
字符串 在python3中已经全面支持中文。 由于Python源代码也是一个文本文件,所以,当你的源代码中包含中文的时候,在保存源代码时,就需要务必指定保存为UTF-8编码。当Python解释器读取源代码时,为了让它按UTF-8编码读取&…

基本MVC原理
参考《Pro PHP》 简单实现了一个mvc框架。 地址http://code.google.com/p/smallframework/自动加载的问题<?php function __autoload($class) { if(file_exists($class.".php")) { require_once($class.".php"); } } class autoload{ public static fu…

31个好用的 Python 字符串方法,建议收藏!
作者 | 小F来源 | 法纳斯特字符串是Python中基本的数据类型,几乎在每个Python程序中都会使用到它。今天,就带大家学习一下31个最重要的内置字符串方法。希望大家能从中找到对自己有帮助的技巧。▍1、Slicingslicing切片,按照一定条件从列表或…

《深入理解计算机系统》读书随笔-位操作
最近开始读《深入理解计算机系统》这本书。对于书中提到的从程序员的角度解读计算机系统这一说法非常感兴趣,所以决定好好读一读。从开始接触计算机编程就是站在一个高级语言的层次,虽然对编译原理,操作系统,汇编语言和计算机组成…

专访小邪:从十年技术之路看阿里技术体系的变革
2019独角兽企业重金招聘Python工程师标准>>> 摘要: 从2008年到2018年,从阿里巴巴中间件团队到飞天八部——小邪与阿里的十年。 编者按:从2008年到2018年,从阿里巴巴中间件团队到飞天八部——小邪与阿里的十年。 2008年…

PHP SPL笔记
PHP SPL笔记作者: 阮一峰日期: 2008年7月 8日这几天,我在学习PHP语言中的SPL。这个东西应该属于PHP中的高级内容,看上去很复杂,但是非常有用,所以我做了长篇笔记。不然记不住,以后要用的时候&am…

算力超越 iPhone,芯片堪比Mac,网友:“买来能干啥?”
整理 | 郑丽媛出品 | CSDN(ID:CSDNnews)自去年“元宇宙”概念突然爆火,作为其“入门钥匙”的 AR/VR 设备也顺势成为了话题焦点,尤其在多家外媒爆料苹果也在为此发力、甚至从 Meta 挖人以争取在 2022 年正式推出时&…

ios开发日记- 5 屏幕截图
-(void)fullScreenshots{UIWindow *screenWindow [[UIApplication sharedApplication] keyWindow]; UIGraphicsBeginImageContext(screenWindow.frame.size);//全屏截图,包括window [screenWindow.layer renderInContext:UIGraphicsGetCurrentContext()]; UIImage …

MaxCompute助力OSS支持EB级计算力
一、 MaxCompute是什么? 你的OSS数据是否作堆积在一旁沉睡已久,存储成本变为企业负担?你是否想唤醒沉睡的数据,驱动你的业务前行?MaxCompute可以帮助你高效且低成本的解决这些问题,通过对海量数据进行分析和…

php自动加载
很多开发者写面向对象的应用程序时对每个类的定义建立一个 PHP 源文件。一个很大的烦恼是不得不在每个脚本(每个类一个文件)开头写一个长长的包含文件列表。 在 PHP 5 中,不再需要这样了。可以定义一个 __autoload 函数,它会在试…

22个案例详解 Pandas 数据分析/预处理时的实用技巧,超简单
作者 | 俊欣来源 | 关于数据分析与可视化今天小编打算来讲一讲数据分析方面的内容,整理和总结一下Pandas在数据预处理和数据分析方面的硬核干货,我们大致会说Pandas计算交叉列表Pandas将字符串与数值转化成时间类型Pandas将字符串转化成数值类型Pandas当…

《mysql性能调优与架构设计》笔记: 一mysql 架构组成
2019独角兽企业重金招聘Python工程师标准>>> 2.1mysql物理文件组成 2.1.1日志文件: 1,查看mysql配置文件:mysql --verbose --help | grep -A 1 Default options; 1,错误日志:--log-error[file_name] 指定错…

发现一个可以搜索常用rpm包的地址(http://www.rpmfind.net/)
http://www.rpmfind.net/ 虽然资源不多,但也够用。 >如有问题,请联系我:easonjim#163.com,或者下方发表评论。<

PHP版UTF-8文件BOM自动检测移除程序
BOM信息是文件开头的一串隐藏的字符,用于让某些编辑器识别这是个UTF-8编码的文件。但PHP在读取文件时会把这些字符读出,从而形成了文件 开头含有一些无法识别的字符的问题。比如用UTF-8格式保存的生成图片的PHP文件,因为文件头隐藏的BOM信息也…

java: web应用中不经意的内存泄露
前面有一篇讲解如何在spring mvc web应用中一启动就执行某些逻辑,今天无意发现如果使用不当,很容易引起内存泄露,测试代码如下: 1、定义一个类App package com.cnblogs.yjmyzz.web.controller;import java.util.Date;public class…

「游戏圈地震级消息」687亿美元,微软收购游戏巨头动视暴雪
整理 | 苏宓、禾木木 出品 | CSDN 2022年1月18日晚,一条热搜刷爆了朋友圈: 继 2018 年,微软以 75 亿美元收购全球知名的代码托管平台 GitHub 后,2022 年 1 月 18 日,微软将以 687 亿美元的价格收购著名游戏制作和发行公…

java实现用户登录注册功能(用集合框架来实现)
需求:实现用户登录注册功能(用集合框架来实现) 分析: A:需求的类和接口 1.用户类 UserBean 2.用户操作方法接口和实现类 UserDao UserDaoImpl 3.测试类 UserTest B:各个类中的东西 1.用户类UserBean: …