python高级编程知识点_(转)python 高级编程技巧学习笔记

转自https://www.jianshu.com/p/104cec085611,部分图出不来,mark一下,关键时候供查看。

第二章 数据结构相关话题

2.1、筛选数据

两种方式

filter函数:filter(lambda x: x>0, data)

注意:python3 需要把filter的结果转为list ,也就是list(filter(lambda x: x>0, data))

加条件的遍历: [ x for x in data if x > 0 ]

如果想转成集合,就把[]改成{}

2.2、如何为元组的每个元素命名

使用元组的好处:减少存储开销

缺点:使用索引访问元素,降低程序可读性

解决方案:

1、定义一系列数值常量

NAME, AGE, SEX, EMAIL = range(4)

2、使用标准库中的collections.namedtuple替代内置tuple

2.3、如何统计序列中出现的频度

解决方案:使用collections.Counter对象

将序列传入Counter的构造器,得到Counter对象是元素频度的字典

Counter.most_common(n)方法得到频度最高的n个元素的字典

2.4、如何根据字典中值的大小,对字典进行排序

解决方案:使用内置函数sorted

2.5、如何快速找到多个字典的公共键

案例:统计每轮比赛都有进球的球员

解决方案:利用集合的交集操作

1、使用字典的viewkeys()方法,得到一个字典keys的集合

2、使用map函数,得到所有字典的keys的集合

3、使用reduce函数,取所有字典的keys的集合的交集

2.6、如何让字典保持有序,也就是遍历的时候按插入顺序打印

解决方案:使用collections.OrderedDict

以OrderedDict代替内置字典dict,依次将数据存入OrderedDict

2.7、如何实现用户的历史记录功能(最多n条)

解决方案:使用容量为n的队列容量存储历史记录

使用标准库collections中的deque,它是一个双端循环队列

程序退出前,可以使用pickle将队列存入文件,再次运行时将其导入。

第三章 迭代器

3.1、如何实现可迭代对象和迭代器对象

可迭代对象需要有iter方法,这个方法返回迭代器对象。

而迭代器对象则要有next()

3.2、如何使用生成器函数实现可迭代对象

yield关键字

yield 是一个类似 return 的关键字,只是这个函数返回的是个生成器

当你调用这个函数的时候,函数内部的代码并不立马执行 ,这个函数只是返回一个生成器对象

当你使用for进行迭代的时候,函数中的代码才会执行

3.3、 如何进行反向迭代以及如何实现反向迭代

解决方案:

1、使用内置函数reversed()方法

2、实现反向迭代协议的 __reverse 方法,它返回一个反向迭代器

3.5、 如何对迭代器做切片操作

解决方案:使用标准库中的itertools.islice,它能返回一个迭代对象切片的生成器

3.6、如何在一个for语句中迭代多个可迭代对象

解决方案:

并行:使用内置函数zip,它能将多个可迭代对象合并,每次迭代返回一个元组

串行:使用标准库中的itertools.chain,它能将多个可迭代对象连接

第四章 字符串处理

4.1、如何拆分含有多种分隔符的字符串

解决方案:

1、连续使用str.split()方法,每次处理一种分隔符

2、使用正则表达式的re.split()方法,一次性拆分字符串

4.2、如何判断一个字符串是以b开头或结尾

解决方案:

使用字符串的str.startswith()和endswith()方法。注意:多个匹配时参数使用元组。

4.3、如何调整字符串中文本的格式

解决方案:

使用正则表达式re.sub()方法做字符串替换,利用正则表达式的捕获组,捕获每个部分内容,在替换字符串中调整各个捕获组的顺序

4.4、如何将多个小字符串拼接成一个大字符串

解决方案:

方法一:迭代列表,使用‘+’连接字符串

方法二:使用str.join()方法,更加快速的拼接列表的字符串

4.5、如何对字符串进行左中右对齐

解决方案:

1、使用字符串的str.ljust(), str.rjust(), str.center()进行左中右对齐

2、使用format()方法,传递类似‘<20’, '^20', '>20'参数

4.6、如何去掉字符串中不需要的字符

解决方案:

1、字符串strip(), lstrip(), rstrip()去掉字符串两端字符

2、删除单个固定位置的字符,可以使用切片 + 拼接的方式

3、字符串的replace方法或正则表达式re.sub()删除任意位置字符

4、字符串translate()方法,可以同时shanchu删除多种不同字符

第五章 文件处理

5.1、如何读写文本文件(py2和py3区别)

字符串的语义发生变化

py2 py3

str ---> bytes

unicode ----> str

解决方案:

py2 写入文件前对unicode编码,读入文件后对二进制解码

py3 open函数指定‘t’的文本模式,encoding指定编码格式

5.2、如何处理二进制文件

解决方案:

open函数以二进制模式打开文件,指定mode为‘b’

二进制文件可以用readinto,读入到提前分配好的buffer中,便于数据处理

解析二进制文件可以用标准库中的struct模块的unpack方法

5.3、如何设置文件的缓冲

解决方案:设置open函数的buffering参数

1、全缓冲,buffering设置为大于1的整数n,n为缓冲区大小

2、行缓冲,buffering设置为1,遇到换行符\n就停止缓冲

3、无缓冲,buffering设置为0

5.4、如何将文件映射到内存

解决方案:使用标准库mmap模块中的mmap()函数,它需要一个打开的文件描述符作为参数

5.5、如何访问文件的状态

解决方案:

1、系统调用,标准库中os模块下的三个系统调用stat, fstat, lstat获取文件状态

2、快捷调用,标准库中os.path下一些函数,使用起来更加简洁(没有文件 访问权限的函数)

5.6、如何使用临时文件?

解决方案:使用标准库中tempfile下的TemporaryFile, namedTemporaryFile

第六章 数据处理

6.1、如何读写CSV数据

解决方案:使用标准库中的CSV模块,可以使用其中reader和writer完成CSV读写

6.2、如何读写json数据

解决方案:使用标准库中的json模块,其中loads,dumps函数可以完成json数据的读写

6.3、如何读写Excel文件

解决方案:使用第三方库xlrd和xlwt,这两个库分别用于Excel读和写

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/311396.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

.NET Core开发实战(第15课:选项框架:服务组件集成配置的最佳实践)--学习笔记...

15 | 选项框架&#xff1a;服务组件集成配置的最佳实践这一节讲解如何使用选项框架来处理服务和配置的关系选项框架的特性&#xff1a;1、支持单例模式读取配置2、支持快照3、支持配置变更通知4、支持运行时动态修改选项值在设计系统的时候需要遵循两个原则&#xff1a;1、接口…

UVA - 572 Oil Deposits-dfs找连通块

Discription 给定一个包含 *的二维数组&#xff0c;输出有几个是联通的&#xff0c;如果一个在另外一个相邻的八个方向则视作相邻。 Input 包含 *的二维数组。 Output 输出联通的个数 解题思路&#xff1a; 从每一个格子出发&#xff0c;递归遍历它周围的格子&#xff0c;每次…

HTMLCSS 超简单的前端设计入门-1!

第一个网页 文章目录第一个网页注释元素(标签,标记)元素的嵌套标准的文档结构语义化什么是语义化为什么需要语义化?文本元素hpspanpreHTML 实体a元素href 属性target属性路径的写法站内内资源和站外资源绝对路径和相对路径Emmet 注释 注释不参与运行 书写方式(html) <!-…

【朝夕技术专刊】WebApi部署多服务器配置Nginx负载均衡

欢迎大家阅读《朝夕Net社区技术专刊》第3期我们致力于.NetCore的推广和落地&#xff0c;为更好的帮助大家学习&#xff0c;方便分享干货&#xff0c;特创此刊&#xff01;很高兴你能成为首期读者&#xff0c;文末福利不要错过哦&#xff01;01PARTCoreWebApi教程本地演示环境Vi…

sprintf()函数的使用

sprintf&#xff08;&#xff09;&#xff1a; 函数功能&#xff1a;把格式化的数据写入某个字符串 函数原型&#xff1a;int sprintf( char buffer, const char format [, argument] … ); 返回值&#xff1a;字符串长度&#xff08;strlen&#xff09; 例子&#xff1a; cha…

CoreJava 笔记总结-第四章 对象与类

文章目录第四章 对象与类使用预定义类对象与对象变量Java库中的LocalDate类更改器方法和访问器方法用户自定义类用var声明局部变量使用null引用隐式参数与显示参数基于类的访问权限私有方法final实例字段静态字段与静态方法静态字段静态常量静态方法工厂方法main方法方法参数对…

windows路由表 重启后就还原了_绕过Apple id并可以随意重启的终极方案来了 (Windows下操作)...

▲请务必点击上方的蓝字关注我们哦&#xff01;「做有用的文章」我们知道自从Cheak M8漏洞出现后&#xff0c;使得A11-A7设备可以绕过AppleID使用&#xff0c;但是有着许多限制&#xff0c;例如不能重启&#xff0c;不能打电话使用蜂窝数据。如今针对无法修复蜂窝数据的Apple I…

UVA - 725 Division-sprintf的妙用

题目&#xff1a; 输入整数n&#xff0c;按从小到大顺序输出所有形如abcde/fghijn的表达式&#xff0c;其中a~j 恰好为0~9的一个排列&#xff08;可以有前导0&#xff09;&#xff0c;2<n<79 解题思路&#xff1a; 暴力枚举。 下面这代码暴力dfs&#xff0c;结果超时了…

基于.NET下的人工智能系列专题|.NET下的人工智能系列专题|用Keras.NET 做一个图像识别的训练...

.NET Core 的应用场景越来越广&#xff0c;开源社区也不断壮大&#xff0c; .NET Core在机器学习领域不断发展ML.NET外&#xff0c;也通过结合Tensorflow.NET去完善ML.NET在深度学习领域的功能&#xff0c;在ML.NET 1.3开始迈出了非常重要的一步。这不仅是微软拥抱开源的策略&a…

CoreJava 笔记总结-第五章 继承

文章目录第五章 继承类、超类和子类定义子类覆盖方法子类构造器多态阻止继承: final类和方法强制类型转换抽象类受保护访问访问控制修饰符小结Object: 所有类的超类Object类型的变量equals方法相等测试与继承hashCode方法toString方法泛型数组列表声明数组列表访问数组列表元素…

WTM系列视频教程:WebApi

文字摘要&#xff1a;“今天跟大家聊聊WTM中的WebApi&#xff0c;WebApi直接继承Controller Base&#xff0c; 他实际上比普通的Controller要更简单&#xff0c;流程更短&#xff0c;因为它不需要处理关于界面的问题。”“实际上如果我们使用普通Controller返回Json&#xff0c…

《C++ Primer》2.1.3节练习

#include <iostream> using namespace std;int main() {cout << "2\x4d\012";cout << "2\tM\n";return 0; }//\x4d输出M //\012输出换行 //\t输出制表符

CoreJava 笔记总结-第六章 接口、lambda表达式与内部类

文章目录第六章 接口、lambda表达式与内部类接口接口的概念接口的属性接口与抽象类静态和私有方法默认方法解决默认方法冲突接口与回调Comparator接口对象克隆lambda表达式函数式接口方法引用构造器引用变量作用域处理lambda表达式再谈Comparator类内部类使用内部类访问对象的状…

【复杂系统迁移 .NET Core平台系列】之静态文件

源宝导读&#xff1a;微软跨平台技术框架—.NET Core已经日趋成熟&#xff0c;已经具备了支撑大型系统稳定运行的条件。本文将介绍明源云ERP平台从.NET Framework向.NET Core迁移过程中的实践经验。一、背景随着ERP的产品线越来越多&#xff0c;业务关联也日益复杂&#xff0c;…

[Abp vNext 源码分析] - 19. 多租户

一、简介ABP vNext 原生支持多租户体系&#xff0c;可以让开发人员快速地基于框架开发 SaaS 系统。ABP vNext 实现多租户的思路也非常简单&#xff0c;通过一个 TenantId 来分割各个租户的数据&#xff0c;并且在查询的时候使用统一的全局过滤器(类似于软删除)来筛选数据。关于…

HTMLCSS 超简单的前端设计入门-2!

文章目录图片元素img元素和a元素连用和map元素和figure元素多媒体元素videoaudio列表元素有序列表无序列表定义列表容器元素div元素语义化容器元素元素包含关系为网页添加样式CSS术语解释选择器声明块CSS代码书写位置常见样式声明选择器简单选择器选择器的组合选择器的并列层叠…

八数码问题I-bfs和map标记

解题思路&#xff1a; bfs&#xff0c;将棋盘转化成一个整数表示其状态&#xff0c;比如我们到到达的状态是815736402&#xff0c;而样例给的输入状态是264137058&#xff0c;因为这些整数过大&#xff0c;标记数组开不下&#xff0c;所以可以用map来代替数组&#xff0c;写得时…

一个迷你ASP.NET Core框架的实现(下)

【框架内幕】| 作者 / Edison Zhou这是恰童鞋骚年的第196篇原创文章上一篇我们了解了AspNetCore.Mini这个项目的背景及项目结构和流程&#xff0c;这一篇我们继续解析几个核心对象。本文整理自A大&#xff08;蒋金楠&#xff09;的主题分享&#xff0c;点击本文底部“阅读原文”…

CoreJava 笔记总结-第七章 异常,断言和日志

文章目录第七章 异常,断言和日志处理错误异常的分类声明检查型异常如何抛出异常创建异常类捕获异常捕获单个异常捕获多个异常再次抛出异常和异常链finally子句try-with-Resource语句分析堆栈轨迹元素使用异常的技巧使用断言使用断言完成参数检查日志基本日志高级日志调试技巧第…

根据后序和中序求二叉树的先序

代码如下&#xff1a; #include <iostream> using namespace std; const int N 1010; int in_order[N], post_order[N], lch[N], rch[N];int build(int inL, int inR, int postL, int postR) {if (inL > inR)return 0;int root post_order[postR];int k inL;while…