导读:很多程序员处理文本而不是数字。文本包含字符:字母、数字、标点符号、空格等。字符串是一系列字符。例如,字符串"Hello"是一个包含5个字符的序列。

作者:凯·霍斯特曼(Cay Horstmann),兰斯·尼塞斯(Rance Necaise)

如需转载请联系大数据(ID:hzdashuju)

01 字符串类型

你在输出语句的介绍中已经见过字符串了,例如

print("Hello") 

字符串可以保存在变量中

greeting = "Hello"

然后就可以在需要的时候像数字值一样来访问:

print(greeting)

字符串常量表示一个特定的字符串(例如"Hello"),就像数字常量(例如2)表示一个特定的数字一样。在Python中,字符串常量由包含在一对单引号或双引号中的字符序列来指定。

print("This is a string.", 'So is this.') 'So is this.') 

因为允许使用两种界定符,Python可以很容易地在字符串中包含撇号或者引号。

message = 'He said "Hello" ' 

我们使用双引号来包含字符串,因为这在很多其他编程语言中是一个通用的约定。然而,在交互式Python解释器环境中总是使用单引号来显示字符串。

字符串中字符的数量称作字符串的长度。例如,"Harry"的长度是5。你可以使用Python内置函数len来计算一个字符串的长度:

length = len("World!")   # 长度为6# 长度为6

长度为0的字符串称作空字符串,它不包含字符,写作:

""

或者

''

02 连接与重复

给定两个字符串,例如"Harry"和"Morgan",你可以把它们连接成一个字符串,结果中包含两个字符串中的所有字符,其中第一个字符串中的字符在前,第二个字符串中的字符在后。在Python中,你可以使用+运算符连接两个字符串。例如:

firstName = "Harry" lastName = "Morgan" name = firstName + lastNamelastName = "Morgan" name = firstName + lastName

结果字符串为

"HarryMorgan" 

如果你想在名和姓之间使用空格进行分隔该怎么做?没问题:

name = firstName + " " + lastName

这个语句连接了3个字符串:firstName、字符串常量" "和lastName。结果是

"Harry Morgan"

如果+运算符的左侧或右侧的表达式是字符串,那么另一侧的表达式也必须是字符串,否则会导致语法错误。你不能把字符串和数字连接到一起。

你也可以通过对一个字符串进行多次重复来产生字符串。例如,假设你需要打印一行破折线。不需要指定一个包含50个破折线的字符串常量,你可以使用*运算符来创建一个包含50个"-"字符的字符串。例如,

dashes = "-" * 5050

结果是字符串

"-------------------------------------------------"

任意长度的字符串都可以使用*运算符进行重复。例如,语句

message = "Echo..." print(message * 5) print(message * 5) 

显示

Echo...Echo...Echo...Echo...Echo...

与字符串相乘的因子必须是整数值,并且可以出现在*运算符的任意一侧,但是习惯上把字符串放在左侧而整数因子放在右侧。

03 转换数字和字符串

有时候需要把数字转换为字符串。例如,假设你需要在字符串尾部追加一个数字。你不能连接字符串和数字:

name = "Agent " + 1729   # 错误:只能连接字符串1729   # 错误:只能连接字符串

因为字符串连接只能在两个字符串之间进行,我们必须首先把数字转换为字符串。

为了生成数字值的字符串表示,使用函数str。语句

str(1729)

把整数1729转换为"1729",函数str解决了我们的问题:

id = 1729 name = "Agent " + str(id) name = "Agent " + str(id) 

函数str也可以用来把浮点数转换为字符串。

反过来,为了把包含数字的字符串转换为数字值,可以使用函数int或float:

id = int("1729") price = float("17.29") price = float("17.29") 

当字符串来自于用户输入时,这个转换很重要。

传递给函数int或float的字符串只能包含隐含类型的常量。例如,语句

value = float("17x29")

会产生运行时错误,因为字母"x"不是浮点数常量的一部分。

前面和后面的空白字符会被忽略:

int(" 1729 ")

仍然是1729。

04 字符串与字符

字符串是Unicode字符的序列。你可以使用字符串和位置来访问单个字符,这个位置称作字符的索引

第1个字符的索引是0,第2个的索引是1,以此类推。

通过特殊的下标记号可以访问单个字符,位置被放置在方括号中。例如,变量name定义如下:

name = "Harry" 

语句

first = name[0]last = name[4]last = name[4]

从字符串中提取了两个不同的字符。第一个语句提取出字符串的第一个字符"H"并存入变量first。第二个语句提取位置4上面的字符,也就是最后一个字符,然后存入变量last。

索引值必须位于字符位置的合法范围,否则会在运行时抛出下标越界异常。函数len可以用来确定最后一个索引,或者字符串的最后一个字符。

pos = len(name) - 1   # "Harry"的长度是5 last = name[pos]      # last被设置为"y" # "Harry"的长度是5 last = name[pos]      # last被设置为"y" 

下面的程序演示了上面概念的用法,程序使用字符串初始化了两个变量,一个使用你的名字,另一个使用你认为比较重要的人的,然后输出首字母。

操作first[0]得到包含first第一个字母的字符串,second[0]获取第二个名字的首字母。最后,使用字符串"&"连接两个单字母的字符串得到长度为3的字符串initials(见图2-4)。

▲图2-4 创建首字母字符串

## #  本程序用来输出一对首字母# # 设置两个名字first = "Rodolfo" second = "Sally" # 计算和显示首字母initials = first[0] + "&" + second[0] print(initials)#  本程序用来输出一对首字母# 

# 设置两个名字first = "Rodolfo" second = "Sally" 

# 计算和显示首字母initials = first[0] + "&" + second[0] print(initials)

字符串运算示例见表2-7。

语句

结果

说明

string = "Py"

string = string + "thon"

string被设置位”Python”

当作用于字符串时,+表示连接。

print("Please" + " enter your name: ")

打印

Please enter your name:

使用续行符打断无法在一行内编写的字符串。

team = str(49) + "ers"

team被设置为”49ers”

因为49是一个整数,必须被转换位字符串。

greeting = "H & S"

n = len(greeting)

n被设置为5

在统计数量时每个空格都作为一个字符。

string = "Sally"

ch = string[1]

ch被设置为"a"

注意,第一个下标是0。

last =   string[len(string) - 1]

last被设置为包含string中最后一个字符的字符串

最后一个字符的位置是len(string)   - 1。

▲表2-7 字符串运算

05 字符串方法

在计算机编程中,对象是表示具有特定行为的值的实体。值可以很简单,像字符串。也可以很复杂,像图形窗口或数据文件。现在,你需要掌握适用于字符串对象的一小部分内容。

对象的行为通过方法来指定。方法和函数很类似,是执行特定任务的一系列程序指令。但是与函数不同的是,方法只能用于定义好的类型的对象,而函数则是独立的操作。例如,你可以把upper方法应用于任何字符串,就像

name = "John Smith" uppercaseName = name.upper()   # 把uppercaseName设置为"JOHN SMITH"uppercaseName = name.upper()   # 把uppercaseName设置为"JOHN SMITH"

注意,方法名紧跟在对象之后,并且使用一个圆点(.)分隔对象和方法名。

另一个方法lower可以用来返回一个字符串的小写版本:

print(name.lower())   # 输出john smith 

至于什么时候需要调用函数(例如len(name))和什么时候调用方法(name.lower()),可能稍微有点武断。你需要进行简单的记忆,在打印版或者在线Python参考资料中进行查找。

像函数调用一样,方法调用也可以有参数。例如,字符串方法replace创建一个新字符串,其中给定子字符串的每次出现都被替换为第二个字符串。下面是该方法具有两个参数的调用:

name2 = name.replace("John", "Jane")   # 把name2设置为"Jane Smith""Jane")   # 把name2设置为"Jane Smith"

注意任何方法的调用都不能修改字符串的值。调用name.upper()之后,变量name的值仍然是"John Smith",该方法的调用返回大写版本。类似地,replace方法返回替换后的新字符串,不会对原字符串做任何修改。

以下列出本节中介绍的字符串方法:

关于作者: 凯·霍斯特曼(Cay Horstmann) ,圣何塞州立大学计算机科学系教授,Java的倡导者,经常在开发人员会议上发表演讲。他是《Java核心技术》的作者,同时也关注Python、Scala、C++等语言,为专业程序员和计算机科学专业学生编写过数十本图书。

兰斯·尼塞斯(Rance Necaise) 兰道尔夫-麦肯学院计算机科学系副教授,撰写了《Data Structures and Algorithms Using Python》和《Python for Java Programmers》等技术书籍。

本文摘编自《Python程序设计(原书第2版)》,经出版方授权发布。

延伸阅读《Python程序设计(原书第2版)》

点击上图了解及购买

转载请联系微信:DoctorData

推荐语:专为Python初学者打造的入门教材,讲解清晰实用,案例丰富有趣。

有话要说?

Q: 你常用哪些字符串操作?

欢迎留言与大家分享

猜你想看? 

  • 5G元年,你最该搞懂的技术竟然是……

  • 入门干货:Python操作Word文件经验分享

  • 父亲节,来认识一下这几位“爸爸”

  • 想用Python爬小姐姐图片?那你得先搞定分布式进程

更多精彩? 

在公众号对话框输入以下关键词

查看更多优质内容!

PPT | 报告 | 读书 | 书单 | 干货 

大数据 | 揭秘 | Python | 可视化

AI | 人工智能 | 5G | 区块链

机器学习 | 深度学习 | 神经网络

1024 | 段子 | 数学 | 高考

据统计,99%的大咖都完成了这个神操作

觉得不错,请把这篇文章分享给你的朋友

转载 / 投稿请联系:baiyu@hzbook.com

更多精彩,请在后台点击“历史文章”查看

点击阅读原文,了解更多

手把手教你学Python:一文看懂字符串基本操作相关推荐

  1. 手把手教你学Python之Matplotlib绘图(一文掌握数据可视化库-Matplotlib)

    目录 Matplotlib介绍 线形图(折线图) 直方图 条形图 饼状图 散点图 Matplotlib介绍        matplotlib是一个Python 的2D绘图库,提供了一套表示和操作图以 ...

  2. 手把手教你学Python之Pandas(一文掌握数据分析与处理库-Pandas)

    目录 基本结构之Series Series对象的创建 Index对象介绍 Series中数据的访问 Series中常用方法 基本结构之DataFrame DataFrame的创建 ​DataFrame ...

  3. 手把手教你学Python之文件操作(一文掌握文件操作)

    目录 1.Python中文本文件的读写 2.Python中常用的文件与文件夹操作方法 3.Python中Excel文件的读写 4.Python读取Excel文件案例​ 为了保存数据,方便修改和分享,数 ...

  4. oracle数据库更新语句_20_手把手教你学Python之操作数据库

    数据库是数据的仓库,将大量数据按照一定的方式组织并存储起来,方便进行管理和维护,例如快速检索和统计等.数据库的主要特点: 以一定的方式组织.存储数据: 能为多个用户共享: 与程序彼此独立. -- 数据 ...

  5. python global用法_14_手把手教你学Python之函数(下)

    变量作用域:根据变量定义的位置,可将变量分为全局变量和局部变量. 全局变量:定义在函数外面的变量,可以在多个函数中进行访问,但不能执行赋值操作.如果有赋值语句,相当于创建了一个同名的局部变量: 局部变 ...

  6. python中字典的value可以为任意对象_手把手教你学Python之字典

    字典是一种无序可变的容器,字典中的元素都是"键(key):值(value)"对, "键"和"值"之间用冒号隔开,所有"键值对&qu ...

  7. 手把手教你学Python之波士顿房价预测(scikit-learn的应用)

    目录 1.波士顿房价预测介绍 2.线性回归算法 3.调用scikit-learn库实现房价预测 1.波士顿房价预测介绍 问题描述:波士顿房价数据集统计的是20世纪70年代中期波士顿郊区房价的中位数,统 ...

  8. 手把手教你学Python之常见运算符

    目录 算术运算符 关系运算符 逻辑运算符 位运算符 成员运算符 身份运算符 前面给大家介绍了Python中的一些基本数据类型,这些数据之间如何进行运算呢?这就需要借助于一些运算符了,Python中提供 ...

  9. python 函数修饰器 父类_手把手教你学python第十四讲(函数装饰器,super用法和时间处理)...

    文中有些字在图中是因为每篇文章最多100张图片,我把有的小图片和文字一起截图了,文中所有的引用都会标出原文网址,除此以外都是作者原创. 有时候会在文章最前或者最后补充一些知识或者把前面说的有问题的地方 ...

最新文章

  1. 制作 Swift 和 Objective-C Mixed 的 Pod
  2. 如何建立企业内部培训体系?
  3. 微软正式发布Azure Storage上的静态网站
  4. preambleTransMax
  5. NOIP2016普及组第三题——海港
  6. html主要的骨架结构
  7. resnet18 参数解读
  8. 使用Android简单实现有道电子词典
  9. 《信号与系统学习笔记》—信号与系统(三)
  10. Proteus仿真Arduino的Proteus Library文件下载
  11. Go语言实战的知识图谱
  12. swagger注释API :@ApiModel
  13. 编译原理:语法分析器
  14. inurl_搜索引擎命令site,intitle,inurl,分别代表什么意思
  15. 基于Matlab App Designer的语音信号分析与处理(二):IIR和FIR滤波器的设计,语音信号的滤波
  16. 解决:操作必须使用一个可更新的查询
  17. mysql_row百度百科_MySQL
  18. 协程爬取整站豆瓣网络
  19. 后台管理系统2——文件上传功能、富文本编辑器集成
  20. 最近准备把安卓和java的知识再回顾一遍,顺便会写博客上!千变万化还都是源于基础,打扎实基础...

热门文章

  1. Qt笔记-解决Q3DScatter加载QCustom3DItem时Cannot open the file问题
  2. Qt文档阅读笔记-Qt Core的官方解析
  3. Qt学习笔记-Qt中OpenGL的使用
  4. error: undefined reference to `_imp__glXXX@XX'
  5. filesaver.js 导出文件路径_CourseMaker微课制作教程20:做好的微课,如何保存和导出为.mp4等视频格式?...
  6. 计算机网络之数据链路层:1、概述
  7. linux 下进程和线程指定CPU运行
  8. AttributeError: module ‘urllib‘ has no attribute ‘urlopen‘错误
  9. C/C++静态库编译报错(/usr/bin/ld:cannot find -lpthread,/usr/bin/ld:cannot find -lc)
  10. zenmap工具说明及常用参数解释