两个字符串组成tuple_史上最全python字符串操作指南

惨不忍睹

拿出了看家的老中医野广告,都没能拯救惨淡的selenium剧集。上周五和朋友聊天,说希望看到一些python基础的知识。本来还担心更新基础的东西没人看,但现在看来,最差不过selenium系列了...哈哈。

虽然说更新基础知识,但基础的东西不代表不重要或者说你们都会,不信走着...

记得有句话说到,当一件事请遇到了正则,那它将变为两件事。看到这句话,你们以为我要讲python正则?NO...

日常编码中,大家会发现,太多时候我们需要对数据进行处理,而这数据不管是数组、列表、字典,最终都逃不开字符串的处理。所以今天要来跟大家发散的聊聊字符串!

字符串的定义

完了,估计很多人看到这个标题就要关网页了,稍等不妨在往下看看?
python定义字符、字符串没有java那样的严格,不管是单引号、双引号、甚至是三个单引号和双引号都可以用来定义字符(串),只要成对出现即可。比如:

# 单个字符
a='a'
# 使用单引号定义字符串
name='Uranus'
# 使用双引号定义字符串
code = "Hello World ..."
# 既然说到了string,怎么能不点开源码看看呢?
class str(object):"""str(object='') -> strstr(bytes_or_buffer[, encoding[, errors]]) -> strCreate a new string object from the given object. If encoding orerrors is specified, then the object must expose a data bufferthat will be decoded using the given encoding and error handler.Otherwise, returns the result of object.__str__() (if defined)or repr(object).encoding defaults to sys.getdefaultencoding().errors defaults to 'strict'."""

虽然这些不是主要说的,但还是简单提下,三个单引号或者双引号,主要是用来作为文档注释的,请不要拿来定义字符串(虽然这样并不会出现语法错误)。
今天主要说下关于打段的字符串应该如何定义,PEP8有规定,一行代码的长度请勿超过120个字符。那么如果遇到这种情况,该怎么办?

# 不推荐的使用方式:
line = """
Create a new string object from the given object.
If encoding or errors is specified,
then the object must expose a data buffer that will be
decoded using the given encoding and error handler.
"""
# 或者这样
line = "Create a new string object from the given object. " "If encoding or errors is specified," "then the object must expose a data buffer that will be" " decoded using the given encoding and error handler."
# 更好的实现方式:
line = ("Create a new string object from the given object.""If encoding or errors is specified,""then the object must expose a data buffer that will be ""decoded using the given encoding and error handler.")

字符串中简单的.is()与.()的用法

.is()*, 既然是is,那么它返回的结果只有两种,True or False
先来对比一下数字:

isdigit()
True: Unicode数字,byte数字(单字节),全角数字(双字节),罗马数字
False: 汉字数字
Error: 无
isdecimal()
True: Unicode数字,全角数字(双字节)
False: 罗马数字,汉字数字
Error: byte数字(单字节)
isnumeric()
True: Unicode数字,全角数字(双字节),罗马数字,汉字数字
False: 无
Error: byte数字(单字节)

总结几个偏门知识点:

a='①②③④⑤'
isdigit()、isnumeric() 为True isdecimal()为False
b='一壹'
isnumeric()会认为是True的哦!

再来看一个等式:

isalnum() = isdigit() + isalpha() + isspace()
isdigit()表示字符串内全部为数字
isalpha()表示字符串内全部为字符
isspace()表示字符串有一个或多个空格组成
isalnum()表示字符串内全部为数字和字符
a='12345'
b='①②③④⑤'
c='abc123'print(a.isdigit()) # True
print(b.isalpha()) # True
print(c.isalnum()) # True

针对字符串大小写的方法:

.isupper() 字符串全部由大写组成
.islower() 字符串全部由小写组成
.istitle() 字符串形式为驼峰命名,eg:"Hello World"

以上这些用法去掉is,则变为了对应的字符串转发方法。学一套会两套,买一送一....

最后说一个不带.的is* --- isinstance(obj,type)

判断一个object是什么类型...
type可选类型为:int,float,bool,complex,str,bytes,unicode,list,dict,set,tuple
并且type可以为一个原组:isinstance(obj, (str, int))

判断字符串中的内容

.*with() starts ends 不仅支持开头结尾的匹配,还支持start和end两个参数来动态定义字符串的index位置

long_string = "To live is to learn,to learn is to better live"
long_string.startswith('To')
long_string.startswith('li', 3, 5)
long_string.endswith('live')
long_string.endswith('live', 0, 7)

同样支持start、end来判断字符串的还有 .find()、.rfind()和 .index()、.rindex()
这两类字符串寻址方法均支持从左到右、从右至左两种寻址方式,不同的是:
find在未找到时,返回-1,而index在未找到时,会抛出ValueError的异常...

long_string.index('live') # 3
long_string.rindex('live') # 42

字符串的内容变更

狭义来说使用,字符串的替换使用.replace()即可,那为什么还要单独说呢?因为它有一个可选你参数count

long_string = "To live is to learn,to learn is to better live"
long_string.count('live') # 2
long_string.replace('live','Live',1)
output:
'To Live is to learn,to learn is to better live'
# 可以看到,第二个live并未进行替换

刚才说了狭义,那么广义呢?

(l/r)strip()
将字符串左、右、两端的特定字符过滤掉,默认为空格...
strip()要注意的地方是,strip('TolLive') 中的字符并非完整匹配,而是针对每一个字符进行匹配,说起来混,直接上例子:

long_string = "To live is to learn,to learn is to better live"
long_string.strip('TolLive')
's to learn,to learn is to better'

字符串切片
字符串的切片分为long_string[start:end;step] start、end区间为左闭右开...这个网上说的太多了,再拉出来详细讲就要挨打了...

(l/r)just(width,[fillchar])、center(width, [fillchar])、zfill(width)
这些均为填充固定长度的字符,默认使用空格(zfill为左补0,z是zero的意思...),看意思就明白了,不用多讲了....

字符串格式化输出

本来fill和center等可以放在这里,但是他们使用频率和重量级不够格,就丢在上面了。
Python格式化输出分为两类,那是在pyton2的时代,即 % 和 format。这两种网上的资料太多了,说的太多显得没逼格...
但,还是要简单说说其中特殊的地方
% 格式化输出:

  • 如何在%的格式输出中,输出用来看做标记为的%符号呢? 使用两个百分号(%%)
  • %(-)(width) width为设置长度,默认左填充空格,添加-号为右填充
  • .width代表字符串截断,保留多少长度的字符串
  • type %s字符串 %d十进制整数 %f小数 ...
  • 多个参数是,后面的参数需要使用括号包裹起来
'姓名:%-5s 年龄:%4d 爱好: %.8s' % ('王大锤',30,'python、Java')
output:
'姓名:王大锤   年龄:  30 爱好: python、J'

format格式输出:
format在python3开始官方就表示为替换%的输出方式,之所以还保留着%,主要是为了兼容性考虑...

  • 对比%,format使用花括号{}表示变量
  • < > ^ 代表了format的对齐方式
'{:-^40s}'.format('华丽的分割线')
output:
'-----------------华丽的分割线-----------------'

f-string
Python3.6的版本更新时,新增了f-string,英文好的可以去看官方解释PEP 498 -- Literal String Interpolation 。
f-string是字符串引号前以f/F开头,并使用{}标注替换位置的使用形式。
之所以官方推出f-string,主要是因为它的更高的性能、更强的功能。例子走起:

name = 'Uranus'
f'Hello,{name}'
f'Hello,{name.lower()}'
f'Hello,{name:^10s}'
f'Hello,{(lambda x: x*2) (name)}'output:
'Hello,Uranus'
'Hello,uranus'
'Hello,  Uranus  '
'Hello,UranusUranus'

怎么说,是高端了一些,但我这人有点念旧啊...

The End

字符串操作还有什么?能沾上边的东西还有太多,但再写下去天就亮了,明天还怎么上班,收摊了收摊了...今天的内容就到这里,如果觉得有帮助,欢迎将文章或我的微信公众号【清风Python】分享给更多喜欢python的人,谢谢。

更多精彩内容,请滑至顶部点击右上角关注小宅哦~

1556866037c6ace8f2f6501e74edd7c8.gif

来源:清风Python 作者:王翔

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

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

相关文章

语言五子棋无ai程序框图_微软多语言预训练模型T-ULRv2登顶XTREME排行榜

编者按&#xff1a;为进一步实现用 AI 赋能用户体验&#xff0c;微软正在不断拓展多语言模型的边界。近日&#xff0c;由微软图灵团队与微软亚洲研究院联合探索的最新跨语言研究成果——多语言预训练模型 T-ULRv2&#xff0c;登顶 XTREME 排行榜&#xff0c;T-ULRv2 可以在相同…

excel学习

1.高配筛选—切片器 (1)创建超级表 选中某个单元格&#xff0c;插入&#xff0c;表格。 (2)插入切片器 插入—切片器 (3)改变切片器样式 选中菜单栏切片器&#xff0c;按钮&#xff0c;选择横排 2.subtotal实现动态编号 3-counta 过滤筛选 103-counta 过滤筛选和隐藏

keil3如何放大字体_Word技巧之快速放大字体!快来GET新技能!

一般情况下我们都会选择用Word编辑文章&#xff0c;文章编辑完成之后我们通常会对文章进行排版。在排版的过程中如果我们需要将Word字体放大该怎么办呢&#xff1f;今天倾尘跟大家分享的就是办公小技巧&#xff1a;Word 里的字体如何无限放大&#xff1f;方法一&#xff1a;点击…

dlib简便下载方法

一、查看已安装Python版本 二、下载python对应版本的dlib.wlh文件 官方网上边是没有3.7版本往后的dlib&#xff0c;想要下载其它版本的dlib自己去找了&#xff0c;但是我这里只有3.8的需要下载的可以点这里 提取码&#xff1a;dlib 三、在dlib.wlh文件所在路径下&#xff0c;安…

stm32 web get 参数_BlackHat2020议题之Web缓存投毒

周末闲着没事就来学习下新的思路,文章很长&#xff0c;花了一天时间才码出来&#xff0c;所以&#xff0c;你懂我意思吧?对了&#xff0c;周末打算出去走走&#xff0c;所以就不更文了本文将会介绍Web缓存投毒的各种骚姿势以及利用链&#xff0c;并会搭配相应案例进行讲解&…

c3p0 服务启动获取连接超时_JDBC数据库连接池

连接池的本质是构建一个容器&#xff0c;容器是用来存创建好的线程&#xff0c;http连接、数据库连接、netty连接等各个连接池的使用大致分为三个部分1、首先是初始化连接池&#xff0c;根据设置相应的参数、连接池的大小、核心连接数等参数&#xff0c;初始化创建数据库、http…

python与数据处理_python数据处理:数据合并和Reshaping

本文资料来自于&#xff1a; Python for Data Analysis: Chapter5, 7, 12 文中实例查看地址&#xff1a;http://nbviewer.jupyter.org/github/RZAmber/for_blog/blob/master/learn_numpy.ipynb 1. Combing and Merging Data Sets 在pandas中&#xff0c;数据可以通过三种方式进…

使用详解_Log4j2使用详解

日志框架简单比较&#xff08;slf4j、j.u.l、log4j、logback、log4j2 &#xff09;slf4j&#xff1a;slf4j是对所有日志框架制定的一种规范、标准、接口&#xff0c;并不是一个框架的具体的实现&#xff0c;因为接口并不能独立使用&#xff0c;需要和具体的日志框架实现配合使用…

paddlehub安装及对口罩检测

1、安装 python -m pip install paddlepaddle -i https://mirror.baidu.com/pypi/simple pip install -i https://mirror.baidu.com/pypi/simple paddlehub 报错&#xff0c;解决方案&#xff1a; >pip install -i https://mirror.baidu.com/pypi/simple paddlehub --use…

语言专项精讲课程 赵海英_最全汇总:沪江日语课程体系指南

沪江日语课程可分为六大类&#xff0c;你可以根据自己的学习意愿快速定位。当然&#xff0c;也有课程涉及多个分类&#xff0c;请仔细查看一下不同课程的偏重&#xff0c;选择适合自己的课程。一、零基础直达 0-N1签约名师&#xff1a;同类课程人气王 签约课程&#xff1b;19节…

学习opencv3_如何高效学习计算机视觉?

计算机视觉是人工智能的一个热门方向&#xff0c;很多人想要入门&#xff0c;但是却找不到方向。对于初学者来说&#xff0c;最快的入门方法是边实践边学习&#xff0c;也就是要掌握计算机视觉的开发工具。但其实对初学者来说并不太友好&#xff0c;主要有几个原因&#xff1a;…

ora-03113 访问某条记录_用了Excel十几年,你居然不知道“记录单”?!可能错过一个亿……...

点击蓝字发送【2020】免费领 100图表模板&#xff01;本文作者&#xff1a;竺兰本文审核&#xff1a;小爽本文编辑&#xff1a;竺兰作为一个 Excel 数据搬运工&#xff0c;我每天的工作就是不断地往表格中输入数据&#xff0c;苦恼啊。但同样作为一个「懂点 Excel」的我&#x…

python三维数组切片_【NumPy学习指南】day4 多维数组的切片和索引

ndarray支持在多维数组上的切片操作。为了方便起见&#xff0c;我们可以用一个省略号&#xff08;...&#xff09;来 表示遍历剩下的维度。 &#xff08;1&#xff09;举例来说&#xff0c;我们先用arange函数创建一个数组并改变其维度&#xff0c;使之变成一个三维数组&#x…

批量修改栏目名_Endnote中英文混排批量修改小技巧

来源&#xff1a;卓琳 赵一鸣 北医三院 临床流行病学和循证医学 如果参考文献量大&#xff0c;涉及多种类型和语言&#xff0c;手工附上参考文献非常低效&#xff0c;还是得借助文献管理软件。由于output style选择的不同&#xff0c;中文参考文献的书写格式有误&#xff0c;有…

python中值滤波去除椒盐噪声_Python实现图像去噪方式(中值去噪和均值去噪)

实现对图像进行简单的高斯去噪和椒盐去噪。 代码如下&#xff1a; import numpy as np from PIL import Image import matplotlib.pyplot as plt import random import scipy.misc import scipy.signal import scipy.ndimage from matplotlib.font_manager import FontProperti…

java 关注公众号没有调接口_深入理解Java继承、封装、多态的实现原理

点击关注上方“Java技术江湖”&#xff0c;设为“置顶或星标”&#xff0c;第一时间送达技术干货。作者&#xff1a;黄小斜文章来源&#xff1a;微信公众号【Java技术江湖】目录从JVM结构开始谈多态JVM 的结构Java 的方法调用方式常量池(constant pool)图 2. 常量池各表的关系方…

系统相机裁剪比例_如何正确设置相机:6个最常见的错误,你还在犯错吗?

你是否在摄影中出现这样的设置错误?查看相机的这6个设置&#xff0c;并按照以下自定义提示操作&#xff0c;以增强照片质量并提高专业摄影水平。1.白平衡绝大多数照片是在自动白平衡模式下拍摄的。这是一个简单的选择&#xff0c;在大多数情况下是合理的&#xff0c;但这不是1…

java 正则首位8或者9的8位数字_正则简单手机号和邮箱练习

正则表达式的组成规则在java中&#xff0c;正则表达式的编译是类java.util.regex.Pattern正则表达式的构造摘要1.字符x包括所有大写和小写字母、所有数字、所有标点符号和一些其他符号的普通字符。比如之前的例子可以将[1-9][0-9]{4,12}改成1[0-9]{4,12}或者a[0-9]{4,12}此时就…

inputstreamreader 编码不完整_素材编码对剪辑效率的影响

这次说说在项目的剪辑阶段关于编码的一些注意事项。压缩编码会拖慢剪辑速度大多数中低端摄像机都使用其于时间压缩的编码来进行录制&#xff0c;也称为Long GOP压缩。这种编码对于缩小文件体积很有用&#xff0c;但是计算机不得不耗费更多的性能来进行剪辑。简单来讲&#xff0…

django默认缓存是多大_Django之缓存 - osc_fd8vzgsi的个人空间 - OSCHINA - 中文开源技术交流社区...

一、缓存由于Django是动态网站&#xff0c;所有每次请求均会去数据进行相应的操作&#xff0c;当程序访问量大时&#xff0c;耗时必然会更加明显&#xff0c;最简单解决方式是使用&#xff1a;缓存&#xff0c;缓存将一个某个views的返回值保存至内存或者memcache中&#xff0c…