第三章 字符串

第三章 字符串%

字符串是不可变的,所有的元素赋值和切片赋值都是非法的
Python提供了多种字符串格式设置方法

yanyu = "hello, %s I like %s age is %s"
beyond = ("beyond","band",23)
yanyu % beyond#结果为:'hello, beyond I like band age is 23'a = "age is %.3f and name is %.2f"
b = (23,14)
a % b#结果为:'age is 23.000 and name is 14.00'
'''
很显然,最后的%s对应的是数,但最后也会转换成字符
如果指定的值不是字符串,将使用str将其转换为字符串
beyond为值,需要插入到yanyu里面,yanyu % beyond位置不可以改变!!!
%.3f将值的格式设置为包含3位小数的浮点数
'''
from string import Template 
tmpl = Template("Hello, $who! $what enough for ya?") 
tmpl.substitute(who="yanyu", what="beyond") #结果为:'Hello, yanyu! beyond enough for ya?'

编写新代码时,应选择使用字符串方法format,使用这种方法时,每个替换字段都用花括号括起

"{},{},and {}".format("apple","water","milk")#结果为:'apple,water,and milk'
"{0},{1},and {2}".format("aaa","bbb","ccc")#结果为:'aaa,bbb,and ccc'
"{0} {3} {1} {2}".format("a","b","c","d")#结果为:'a d b c'

格式说明符 .2f,并使用冒号:将其与字段名隔开,意味着要使用包含2位小数的浮点数格式;若没有指定,则输出多位

from math import pi
"{name} is  {value}.".format(value=pi, name="π")#结果为:'π is  3.141592653589793.'
"{name} is  {value:.2f}.".format(value=pi, name="π")#结果为:'π is  3.14.'
from math import e 
f"Euler's constant is roughly {e}." 
"Euler's constant is roughly {e}.".format(e=e)'''
上述俩结果均一样:
"Euler's constant is roughly 2.718281828459045."
'''

要在最终结果中包含花括号,可在格式字符串中使用两个花括号(即{{或}})来指定

"{{ceci n'est pas une replacement field}}".format()#结果为:"{ceci n'est pas une replacement field}"

每个值都被插入字符串中,以替换用花括号括起的替换字段
替换字段由字段名转换标志格式说明符组成其中每个部分都是可选的

替换字段名

"{foo} {} {bar} {}".format(1, 2, bar=4, foo=3)#结果为:'3 1 4 2'
"{foo} {1} {bar} {0}".format(1, 2, bar=4, foo=3)#结果为:'3 2 4 1'
name = ["huangjiaju","yanyu","yeshirong"]
"{band[1]} like the {band[0]} and {band[2]}".format(band=name)#结果为:'yanyu like the huangjiaju and yeshirong'
import math
temp1 = "The {mod.__name__} value is {mod.pi:.2f} for Π"
temp1.format(mod=math)#结果为:'The math value is 3.141592653589793 for Π'#变量__name__包含指定模块的名称temp2 = "The {mod.__name__} value is {mod.pi:.2f} for Π"
temp2.format(mod=math)#结果为:'The math value is 3.14 for Π'

1,基本转换

三个标志(s、r和a)指定分别使用str、repr和ascii进行转换
函数str通常创建外观普通的字符串版本(这里没有对输入字符串做任何处理)
函数repr尝试创建给定值的Python表示(这里是一个字符串字面量)
函数ascii创建只包含ASCII字符的表示,类似于Python 2中的repr

print("{pi!s} {pi!r} {pi!a}".format(pi="π"))
#结果为:π 'π' '\u03c0'

这里的f和b之类的表示类型说明符,具体的参考下表所述

"The number is {num}".format(num=42) #结果为:'The number is 42' 
"The number is {num:f}".format(num=42) #结果为:'The number is 42.000000'
"The number is {num:.2f}".format(num=42) #结果为:'The number is 42.00'
"The number is {num:b}".format(num=42) #结果为:'The number is 101010'
类型含 义
b将整数表示为二进制数
c将整数解读为Unicode码点
d将整数视为十进制数进行处理,这是整数默认使用的说明符
e使用科学表示法来表示小数(用e来表示指数)
E与e相同,但使用E来表示指数
f将小数表示为定点数
F与f相同,但对于特殊值(nan和inf),使用大写表示
g自动在定点表示法和科学表示法之间做出选择。这是默认用于小数的说明符,但在默认情况下至少有1位小数
G与g相同,但使用大写来表示指数和特殊值
n与g相同,但插入随区域而异的数字分隔符
o将整数表示为八进制数
s保持字符串的格式不变,这是默认用于字符串的说明符
x将整数表示为十六进制数并使用小写字母
X与x相同,但使用大写字母
%将数表示为百分比值(乘以100,按说明符f设置格式,再在后面加上%)

2,宽度、精度和千位分隔符

设置浮点数(或其他更具体的小数类型)的格式时,默认在小数点后面显示6位小数,并根据需要设置字段的宽度,而不进行任何形式的填充
字符串和数的默认对齐方式不同
数是默认右对齐;而字符串是默认左对齐

"{beyond:10}".format(beyond=2)  #结果为:'         2'
"{name:10}".format(name="yanyu")#结果为:'yanyu     '
'{:010.2f}'.format(pi)#结果为:'0000003.14'
# 010表示整体包括小数点共占十位且不足的话用0补齐,.2f表示小数点后2为小数,f为浮点数"PI day is {P:.2f}".format(P=pi)#结果为:'PI day is 3.14'
"{PI:10.2f}".format(PI=pi)      #结果为:'      3.14'
"{:.5}".format("a ha haha")     #结果为:'a ha '
"10 de yibaicifang is {:,}".format(10 ** 100)#结果为:'10 de yibaicifang is 10,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000'  千位分隔符

3,符号、对齐和用 0 填充

要指定左对齐、右对齐和居中,可分别使用<>^

print("{0:<10.2f}\n {0:^10.2f}\n {0:>10.2f}\n".format(pi))
'''
3.143.143.14
'''

填充字符来扩充对齐说明符,这样将使用指定的字符而不是默认的空格来填充

"{:$^25}".format(" beyond yanyu ")#结果为:'$$$$$ beyond yanyu $$$$$$'

具体的说明符 = ,它指定将填充字符放在符号和数字之间

print('{0:10.2f}\n{1:10.2f}'.format(pi, -pi))
'''3.14-3.14
'''
print('{0:10.2f}\n{1:=10.2f}'.format(pi, -pi))
'''3.14
-     3.14
'''print('{0:+.2}\n{1:+.2}'.format(pi, -pi))
’‘’
+3.1
-3.1
‘’‘
print('{0:-.2}\n{1:-.2}'.format(pi, -pi)) #默认设置'''3.1
-3.1
#若{0}为pi是正数的话,{0:-.2}无法在pi前面添负号,最后的结果取决于format里面数的正负值'''
print('{0: .2}\n{1: .2}'.format(pi, -pi))
'''3.1
-3.1
'''

井号(#)选项,你可将其放在符号说明符和宽度之间
这个选项将触发另一种转换方式,转换细节随类型而异
对于二进制、八进制和十六进制转换,将加上一个前缀

"{:b}".format(42)#结果为:'101010'
"{:#b}".format(42)#结果为:'0b101010'"{:g}".format(42)#结果为:'42'
"{:#g}".format(42)#结果为:'42.0000'

字符串方法

虽然字符串方法完全盖住了模块string的风头,下面是模块string中几个很有用的常量

常量名称作用
string.digits包含数字0~9的字符串
string.ascii_letters包含所有ASCII字母(大写和小写)的字符串
string.ascii_lowercase包含所有小写ASCII字母的字符串
string.printable包含所有可打印的ASCII字符的字符串
string.punctuation包含所有ASCII标点字符的字符串
string.ascii_uppercase包含所有大写ASCII字母的字符串

虽然说的是ASCII字符,但值实际上是未解码的Unicode字符串

1,center,通过在两边添加填充字符(默认为空格)让字符串居中

"字符串".center(num,"占位符")#表示:将字符串一共占num个位置,然后在这num个位置居中,占位符填充,若无占位符默认空格填充

"beyond yanyu huangjiaju".center(25)#结果为:' beyond yanyu huangjiaju '
"beyond yanyu huangjiaju".center(25,"$")#结果为:'$beyond yanyu huangjiaju$'

2,find,在字符串中查找子串。如果找到,就返回子串的第一个字符的索引,否则返回-1

字符串方法find返回的并非布尔值
如果find像这样返回0,就意味着它在索引0处找到了指定的子串

'With a moo-moo here, and a moo-moo there'.find('moo')#结果为:7title = "Monty Python's Flying Circus"
title.find('Monty')#结果为:0
title.find('Python')#结果为:6
title.find('Flying')#结果为:15
title.find('Zirquss')#结果为:-1subject = '$$$ Get rich now!!! $$$'
subject.find('$$$')#结果为:0

指定搜索的起点和终点(它们都是可选的),左闭右开

subject = '$$$ Get rich now!!! $$$'subject.find('$$$')#结果为:0
#只指定了起点
subject.find('$$$', 1)#结果为:20subject.find('!!!')#结果为:16
#同时指定了起点和终点
subject.find('!!!', 0, 16)#结果为:-1

3,join,其作用与split相反,用于合并序列的元素

所合并序列的元素必须都是字符串连接符.join(字符串列表)将字符串列表通过连接符相连,连接符可为空

beyond = [1,9,9,3]
yy =+“
YY = ”“
yy.join(beyond)#结果为:报错,原因是合并序列只能是字符串
sq = ['1','9','9','9']
yy.join(sq)#结果为:'1+9+9+9'
YY.join(sq)#结果为:'1999'dirs = '', 'usr', 'bin', 'env'
'/'.join(dirs)#结果为:'/usr/bin/env'
print('C:' + '\\'.join(dirs))#结果为:C:\usr\bin\env

4,lower,返回字符串的小写版本

将所有的用户名都转换为小写,并于搜索指定姓名用户

name = "beyond"
names = ["yanyu","huangjiaju","yeshirong","beyond","huangguanzhoang","huangjiaqiang"]
if name.lower() in names:print("I found it!")
#结果为:I found it!

一个与lower相关的方法是title,它将字符串转换为词首大写,即所有单词的首字母都大写其他字母都小写
与title功能一样的是使用模块string中的函数capwords

"i like beyond band".title()#结果为:'I Like Beyond Band'import string 
string.capwords("i like beyond band")#结果为:'I Like Beyond Band'

5,replace,将指定子串都替换为另一个字符串,并返回替换后的结果

 'This is a test'.replace('is', 'eez')#结果为:'Theez eez a test'

6,split,一个非常重要的字符串方法,其作用与join相反,用于将字符串拆分为序列

如果没有指定分隔符,将默认在单个或多个连续的空白字符(空格、制表符、换行符
等)处进行拆分

'1+2+3+4+5'.split('+') #结果为”['1', '2', '3', '4', '5'] 
'/usr/bin/env'.split('/') #结果为:['', 'usr', 'bin', 'env'] 
'Using the default'.split() #结果为:['Using', 'the', 'default']

7,strip,将字符串开头末尾的空白(但不包括中间的空白)删除,并返回删除后的结果

' I very like beyond band '.strip()#结果为:'I very like beyond band'

假定用户输入用户名时不小心在末尾加上了一个空格,搜索的时候就可以发挥这个方法的作用了

names = ['gumby', 'smith', 'jones']
name = 'gumby '
if name in names: print('Found it!')#结果为:按下enter 没反应 因为用户名称多了个空格
if name.strip() in names: print('Found it!')#结果为:按下enter Found it!

还可在一个字符串参数中指定要删除哪些字符

'*!*!###!!!!* SPAM * for * everyone!!! *@*$$$*'.strip(' #*!@$')#结果为:'SPAM * for * everyone'

8,translate,与replace一样替换字符串的特定部分,但不同的是它只能进行单字符替换

优势在于能够同时替换多个字符,因此效率比replace高

假设你要将一段英语文本转换为带有德国口音的版本,为此必须将字符c和s分别替换为k和z,使用translate前必须创建一个转换表table = str.maketrans('cs', 'kz')
创建转换表后,就可将其用作方法translate的参数
还可提供可选的第三个参数,指定要将哪些字母删除

table1 = str.maketrans('cs', 'kz')
'this is an incredible test'.translate(table1)#结果为:thiz iz an inkredible tezt'table2 = str.maketrans('cs', 'kz', ' ')
'this is an incredible test'.translate(table2)#结果为:'thizizaninkredibletezt'

9,判断字符串是否满足特定的条件

isspaceisdigitisupper,它们判断字符串是否具有特定的性质
(如包含的字符全为空白数字大写
如果字符串具备特定的性质,这些方法就返回True,否则返回False

YY = “BEYOND”
yy = "123456qwe"
q = "   "
YY.isupper()#结果为:True
yy.isdigit()#结果为:False
q.isspace()#结果为:True

本章节介绍的新函数

函 数描 述
string.capwords(s[, sep])使用split根据sep拆分s,将每项的首字母大写,再以空格为分隔符将它们合并起来
ascii(obj)创建指定对象的ASCII表示

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

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

相关文章

【视觉项目】【day5】8.25号实验记录(修完BUG,28张测试图,13个样本,四张测试图误判,这比之前效果好很多了)

目录修改完BUG后的程序以及效果优化思路&#xff0c;增强正确识别率&#xff08;待验证&#xff09;修改完BUG后的程序以及效果 修改代码后的测试结果&#xff1a;(利用连通域面积将明显比本张测试图的瓶子要小的模板提前去除&#xff0c;减少误判) 这样下来&#xff0c;28张测…

linux kernel and user space通信机制,Linux内核空间与用户空间通信机制地研究.doc

实用文案标准文档Linux内核空间与用户空间通信机制的研究Linux kernel space and user space communication mechanism摘 要Linux 是一个源码开放的操作系统&#xff0c;无论是普通用户还是企业用户都可以编写自己的内核代码&#xff0c;再加上对标准内核的裁剪从而制作出适合自…

前台用js、jquery出现错误很多是由于IE缓存

例如&#xff1a;当你用jquery进行异步请求数据时&#xff0c;如果浏览器发现请求的地址不变&#xff0c;或者参数也不改变的情况下 IE默认是取原来的缓存中的数据&#xff0c;而不进行重新请求数 解决的方法是是在地址栏的后面加上一个随机参数值&#xff0c;IE发现地址改变&a…

python 示例_带有示例的Python date timetuple()方法

python 示例Python date.timetuple()方法 (Python date.timetuple() Method) date.timetuple() method is used to manipulate objects of date class of module datetime. date.timetuple()方法用于操作模块datetime的日期类的对象。 It is an instance method which means …

WebC.BBS 项目参与新人必读

开发环境: 采用Visual Studio 2010&#xff0c;MVC版本采用Asp.Net MVC3&#xff0c;数据库采用Sql2005 2008,扩展技术包括jQuery。 SVN的相关信息&#xff1a; SVN-Url&#xff1a;svn://svn.cyqdata.com/project_bbs 账户申请&#xff1a;请将自己的密码发给组长&#xff0c;…

第四章 字典

第四章 字典{键:值,名字:电话号码} 映射&#xff1a;通过名称来访问其各个值的数据结构 列表&#xff1a;将一系列值组合成数据结构并通过编号来访问各个值 字典是Python中唯一的内置映射类型&#xff0c;其中的值不按顺序排列&#xff0c;而是存储在键下 键可能是数、字符串…

利用梯度下降法求解一元线性回归和多元线性回归

文章目录原理以及公式【1】一元线性回归问题【2】多元线性回归问题【3】学习率【4】流程分析&#xff08;一元线性回归&#xff09;【5】流程分析&#xff08;多元线性回归&#xff09;归一化原理以及每种归一化适用的场合一元线性回归代码以及可视化结果多元线性回归代码以及可…

linux x64 asm 参数传递,NASM汇编学习系列(1)——系统调用和参数传递

0. 说明本学习系列代码几乎完全摘自&#xff1a;asmtutor.com&#xff0c;如果英文可以的(也可以用谷歌浏览器翻译看)&#xff0c;可以直接看asmtutor.com上的教程系统环境搭建&#xff1a;(我用的是ubuntu18.04.4 server&#xff0c;安装gcc、g)sudo apt install nasmsudo apt…

Javascript之创建对象(原型模式)

我们创建的每个函数都有一个prototype(原型)属性&#xff0c;这个属性是一个指针&#xff0c;指向一个对象&#xff0c;它的用途是包含可以有特定类型的所有实例共享的属性和方法。 prototype就是通过构造函数而创建的那个对象的原型对象。使用原型的好处就是可以让所有对象实例…

treeset java_Java TreeSet pollLast()方法与示例

treeset javaTreeSet类pollLast()方法 (TreeSet Class pollLast() method) pollLast() method is available in java.util package. pollLast()方法在java.util包中可用。 pollLast() method is used to return the last highest element and then remove the element from thi…

第五章 条件、循环及其他语句

第五章 条件、循环及其他语句 再谈print和import print现在实际上是一个函数 1&#xff0c;打印多个参数 用逗号分隔&#xff0c;打印多个表达式 sep自定义分隔符&#xff0c;默认空格 end自定义结束字符串&#xff0c;默认换行 print("beyond",yanyu,23)#结果为…

两种方法将Android NDK samples中hello-neon改成C++

一、第一种方法&#xff1a;1.修改helloneon.c 中代码 a.将 char* str; 改为 char str[512] {0}; b.将 asprintf(&str, "FIR Filter benchmark:\nC version : %g ms\n", time_c); 改为 sprintf(str, "FIR Filter benchmark:\nC ve…

【视觉项目】【day6】8.26关于matchTemplate()以及NCC的思考整理

NCC与matchTemplate()函数中match_method TM_CCOEFF_NORMED是否一样&#xff1f; 先看公式&#xff1a; TM_CCOEFF_NORMED NCCTM_CCOEFF_NORMED:归一化的相关性系数匹配方法 NCC:normalized cross correlation:归一化互相关系数 公式是一样的。 参考&#xff1a; 模板匹配的几…

linux待机流程,Linux睡眠喚醒機制--Kernel態

一、對於休眠(suspend)的簡單介紹 在Linux中,休眠主要分三個主要的步驟: 1) 凍結用戶態進程和內核態任務2) 調用注冊的設備的suspend的回調函數, 順序是按照注冊順序3) 休眠核心設備和使CPU進入休眠態, 凍結進程是內核把進程列表中所有的進程的狀態都設置為停止,並且保存下…

strictmath_Java StrictMath log1p()方法与示例

strictmathStrictMath类log1p()方法 (StrictMath Class log1p() method) log1p() method is available in java.lang package. log1p()方法在java.lang包中可用。 log1p() method is used to return (the logarithm of the sum of the given argument and 1 like log(1d) in th…

第六章 抽象

第六章 抽象 自定义函数 要判断某个对象是否可调用&#xff0c;可使用内置函数callable import math x 1 y math.sqrt callable(x)#结果为&#xff1a;False callable(y)#结果为&#xff1a;True使用def&#xff08;表示定义函数&#xff09;语句&#xff0c;来定义函数 …

HTTP 状态代码

如果向您的服务器发出了某项请求要求显示您网站上的某个网页&#xff08;例如&#xff0c;当用户通过浏览器访问您的网页或在 Googlebot 抓取该网页时&#xff09;&#xff0c;那么&#xff0c;您的服务器会返回 HTTP 状态代码以响应该请求。 此状态代码提供了有关请求状态的信…

TensorFlow的可训练变量和自动求导机制

文章目录一些概念、函数、用法TensorFlow实现一元线性回归TensorFlow实现多元线性回归一些概念、函数、用法 对象Variable 创建对象Variable&#xff1a; tf.Variable(initial_value,dtype)利用这个方法&#xff0c;默认整数为int32&#xff0c;浮点数为float32&#xff0c;…

linux samba安装失败,用aptitude安装samba失败

版本&#xff1a;You are using Ubuntu 10.04 LTS- the Lucid Lynx - released in April 2010 and supported until April 2013.root下执行aptitude install sambaReading package lists... DoneBuilding dependency treeReading state information... DoneReading extended st…

django第二个项目--使用模板做一个站点访问计数器

上一节讲述了django和第一个项目HelloWorld&#xff0c;这节我们讲述如何使用模板&#xff0c;并做一个简单的站点访问计数器。 1、建立模板 在myblog模块文件夹&#xff08;即包含__init__.py的文件夹)下面新建一个文件夹templates&#xff0c;用于存放HTML模板&#xff0c;在…