4000字带你深入掌握字符串
原文点这里
字符串是 Python 中最常用的数据类型,几乎所有的python应用程序都会以某种方式用到字符串。今天我们就利用几分钟时间详细了解下我们经常用的这种数据类型。
字符串是什么
字符串是单个字符的序列。序列这个术语很重要,这意味着字符串是固定的,即他们的位置无法改变。字符串中可以包含数字、字母,以及一些控制字符,如换行符、制表符等。
- 使用单引号(’)
你可以用单引号定义字符串,就如同’xiao Q’这样。所有的空白,即空格和制表符都照原样保留。
- 使用双引号(")
在双引号中的字符串与单引号中的字符串的使用完全相同,例如"xiao Q"。
- 使用三引号(’’'或""")
利用三引号,你可以指示一个多行的字符串。你可以在三引号中自由的使用单引号和双引号。例如:
‘’’
My name is xiao Q,
我的中文名字叫小Q,
这是一个多行字符串。
‘’’
注意上述三种字符串在语义上没有任何差别,但必须要求在字符串开始和结尾使用的引号类型必须相同。
将多个字符串常量放在一行会连接起来,如
string = "hello"'world' '!'
helloworld!
转义符
假设你想要在一个字符串中包含一个单引号(’),那么你该怎么指示这个字符串?例如,这个字符串是What’s your name?。你肯定不会用’What’s your name?'来指示它,因为Python会弄不明白这个字符串从何处开始,何处结束。所以,你需要指明字符串中间的单引号不是字符串的结尾。可以通过转义符来完成这个任务(如果只用双引号和单引号定义整个字符串,则可以相应的嵌入单引号和双引号)。
在python中使用反斜杠(’\’)来转义特殊字符,如换行符,反斜杠本身,引号等等。下面列出了一些常用的转义字符,无法识别的转义符将连同前面的反斜杠在内保持原样。
常见的转义字符
字符 | 描述 |
---|---|
\ | 续行符 |
\\ | 反斜杠符号 |
\’ | 单引号 |
\" | 双引号 |
\a | 响铃(音箱发出声音) |
\b | 退格 |
\e | 转义 |
\0 | 空 |
\n | 换行 |
\v | 纵向制表符 |
\t | 横向制表符 |
\r | 回车 |
\f | 换页 |
下面我们展示下转义字符在字符串中的应用。
print("xiao \
Q") # 加入续行符
xiao Q
print("\\") # 反斜杠,输出为\
print("xiao \t Q") #纵向制表符
xiaoQ
print("xiao\rQ")
Q
自然字符串
如果你想要指示某些不需要如转义符那样的特别处理的字符串,即不想任何转义字符生效时,那么你需要指定一个自然字符串。自然字符串通过给字符串加上前缀r或R来指定。例如r"Newlines are indicated by \n"。
print(r"\n \a \\ \'")
\n \a \\ \'
Unicode字符串
Unicode是书写国际文本的标准方法,它为每种语言的每一个字符都设定了统一并且唯一的二进制编码。那么你需要有一个支持Unicode的编辑器。类似地,Python允许你处理Unicode文本——你只需要在字符串前加上前缀u或U 。例如,u"This is a Unicode string."。
在你处理文本文件的时候就可以使用Unicode字符串,特别是当你知道这个文件含有用非英语的语言写的文本。
字符串操作
python中可以使用“+”,“*”,”in", "not in"等运算符对字符串进行操作。
a = "xiao"
b = "Q"
c = 7
print(a + b) # 使用+连接字符串,输出为:xiaoQ。
print(b * c) # 使用*重复字符串,这里重复c=7次,输出为:QQQQQQQ
print(a + str(c)) # 注意:不同数据类型无法合并,这里c是int型,我们需要利用str()将其转成字符串型,才能够与a进行连接。
print('a' in a) # True, 判断a中是否含有字符'a'
print('c' not in a) # True, 判断a中不含有字符'c'
同时,python也提供了很多对字符串操作的函数,如下表所示(未列出全部)。
字符串操作 | 描述 |
---|---|
string.capitalize() | 将字符串的第一个字符转换为大写 |
string.center(width,fillchar) | 返回一个原字符串居中,并使用空格填充至长度 width 的新字符串 |
string.count(str,beg=0,end=len(string)) | 获得字符串中,某一子字符串出现的次数,如果beg和end指定,则返回指定范围内str出现的次数 |
string.endswith(obj,beg=0,end=len(string)) | 检查字符串是否以 obj 结束,如果beg 或者 end 指定则检查指定的范围内是否以 obj 结束 |
string.find(str,beg=0,end=len(string)) | 检测 str 是否包含在字符串中,如果指定范围 beg 和 end ,则检查是否包含在指定范围内 |
string.index(str,beg=0,end=len(string)) | 跟find()方法一样,只不过如果str不在字符串中会报一个异常. |
string.isalnum() | 如果字符串至少有一个字符并且所有字符都是字母或数字则返 回 True,否则返回 False |
string.isalpha() | 如果字符串至少有一个字符并且所有字符都是字母则返回 True, 否则返回 False |
string.isdecimal() | 如果 string 只包含十进制数字则返回 True 否则返回 False. |
string.isdigit() | 如果字符串只包含数字则返回 True 否则返回 False |
string.islower() | 检查是否都为小写字母 |
string.isspace() | 如果字符串中只包含空白,则返回 True,否则返回 False. |
string.istitle() | 检查字符串中的单词是否都为首字母大写 |
string.isupper() | 检查字符串是否都为大写字母 |
string.join() | 以指定字符串作为分隔符,将 seq 中所有的元素(的字符串表示)合并为一个新的字符串 |
string.lstrip() | 截掉 string 左边的空格 |
string.lower() | 转换 string 中所有大写字符为小写 |
string.split(str="", num=string.count(str)) | 以 str 为分隔符切片 string,如果 num 有指定值,则仅分隔num+1个子字符串 |
string.swapcase() | 将字符串中大写转换为小写,小写转换为大写 |
string.title() | 所有单词首字母大写,其余字母小写 |
string.upper() | 转换字符串中的小写字母为大写 |
len(string) | 返回字符串长度 |
函数的使用如下所示:
s = "xiaoQ"
s.capitalize() # 返回为'Xiaoq'
s.center(7) # 返回为' xiaoQ '
s.count('x') # 返回为1
s.endswith('q') # 返回为False
s.find('a') # 返回为2,若str不在字符串中,则返回-1
s.index('i') # 返回为1,若str不在字符串中,会报错
s.isalnum() # 返回为True
s.isalpha() # 返回为True
s.isdecimal() # 返回为False
s.isdigit() # 返回为False
s.islower() # 返回为Falsesp = " "
s.isspace() # 返回为False
sp.isspace() # 返回为True
s.istitle() # 返回False
s.isupper() # 返回False
'_'.join(s) # 返回为'x_i_a_o_Q'sl = " xiaoQ"
sl.lstrip() # 返回为"xiaoQ"
s.lower() # 返回为"xiaoq"
s.split('a') # 返回为['xi','oQ']
s.swapcase() # 返回为"XIAOq"st = "my name is xiao q"
st.title() # 返回为"My Name Is Xiao Q"
st.upper() # 返回为”MY NAME IS XIAO Q“
len(st) # 返回为17
注意,以上函数并不改变字符串本身,而是返回修改后的新的字符串。如果要修改原字符串,可以使用如下所示方法,如:
s = s.title # 此时s变成"My Name Is Xiao Q"
索引和分片
前面我们也说了字符串是一个不可改变序列的列表,即一旦声明了字符串,则该字符串中每个字符都有了自己固定的位置。在python中可以使用[]来访问字符串中指定位置上的字符。同时也可以指定索引范围,称为分片。
s = "xiao Q"
s[2] # 索引字符串中序号为2的字符,也就是第3个字符,'a'
s[-1] # 从字符串尾部索引倒数第1个字符,'Q'
s[1:3] # 取字符串中第2个字符到第4个字符的内容,但不包括第4个内容,'ia'
s[1:-1] # 从第2个字符到最后1个字符,但不包含最后一个,'iao Q'
s[:-2] # 等同于[0:-2]相同,'xiao'
索引与分片string[start: end]的过程遵循以下的规则:
- 返回的字符串包含从start起始到end但不包括end结束的所有字符,也不包含end指定的字符。
- 若指定了start但未指定end,则一直向后分片,直至字符串结束。
- 若指定了end但未指定start,则从0开始分片直至end,但不包含end指定的字符。
- 若start和end均指定为负数,则索引从字符串尾部开始,而不是从首部开始。最后一个字符为-1。
格式化
由于字符串中的字符顺序是不可变的,但是在某些情况,又要根据不同需要修改字符串的内容。此时,可以使用"%"开头的字符,用以改变字符串的内容,转换符只是一个占位符,它会被后面表达式(变量、常量、数字、字符串、加减乘除等各种形式)的值代替。使用时将格式化的字符串放于运算符%左边,需内插到返回表达式的对象放置于右边。例如:
"my name is %s"% 'xiao Q' # 返回"my name is xiao Q"
常用的格式化字符如下表所示。
符号 | 描述 |
---|---|
%c | 转换成字符(ASCII 码值,或者长度为一的字符串) |
%r | 使用 repr() 函数将表达式转换为字符串 |
%s | 使用 str() 函数将表达式转换为字符串 |
%d/%i | 转成有符号十进制数 |
%u | 转成无符号十进制数 |
%o | 转成无符号八进制数 |
%x/%X | 转成无符号十六进制数(x / X 代表转换后的十六进制字符的大小写) |
%e/%E | 转成科学计数法(e / E控制输出e / E) |
%f/%F | 转成浮点数(小数部分自然截断) |
%g/%G | %f和%e的简写 |
%% | 输出% (格式化字符串里面包括百分号,那么必须使用%%) |
%p | 用十六进制数格式化变量的地址 |
通过"%“可以进行字符串格式化,但是”%"经常会结合下面的辅助符一起使用。
辅助符号 | 描述 |
---|---|
* | 定义宽度或者小数点精度 |
- | 用做左对齐 |
+ | 在正数前面显示加号(+) |
# | 在八进制数前面显示零(0),在十六进制前面显示"0x"或者"0X"(取决于用的是"x"还是"X" |
0 | 显示的数字前面填充"0"而不是默认的空格 |
(var) | 映射变量(通常用来处理字段类型的参数) |
m.n | m 是显示的最小总宽度,n 是小数点后的位数(如果可用的话) |
f = 3.1415926
n = 77
print("f is %.2f, n is %d "%(f,n)) # 输出为"f is 3.14, n is 77"
print("n is %10d"%n) #输出为"n is 77"
当然,python也提供了format函数进行格式化。它用{}来代替之前的%。具体使用如下所示。
name = "xiao Q"
print("my name is {}".format(name)) # 输出为"my name is xiao Q"age = 25print("{} is {} years old".format(name,age)) # 输出为"xiao Q is 25 years old"print "He is {0}! {0} is {1} years old".format(name, age) # 输出为"He is xiao Q! xiao Q is 25 years old"# 下标参数
Q1 = ["xiao Q", 25]
Q2 = ["old Q", 18]
print ("{0[0]} is {0[1]} years old,{1[0]} is {1[1]} years old".format(Q1, Q2))
# 输出为"xiao Q is 25 years old,old Q is 18 years old"
你也可以在字符串前面加上f用以代替format。
print(f"{name} is {age} years old") # 输出为"xiao Q is 25 years old"
总结
今天我们详细介绍了python中常用的数据类型-字符串(string),希望通过本文你能在今后的学习工作中灵活运用字符串。
更多python内容分享,请关注:
4000字带你深入掌握字符串相关推荐
- 互联网高级架构师用4000字带你把大型网站的业务演变过程给讲明白
大型网站业务和架构的发展 虽然说大型网站的内部非常复杂,理解大型网站架构也是一件非常困难的事情,但是技术终究是问题驱动的,某个特定的技术在一开始就是为了解决某个特定的问题或实现某个特定的想法而生的. ...
- 零基础带你学习MySQL—字符串相关的函数(十三)
零基础带你学习MySQL-字符串相关的函数(十三) 一.CHARSET (str)返回子串字符集 二.CONCAT连接子串,将多个列拼接成一列 三.INSTR(string,substring)返回s ...
- 《朗读者》的读后感优秀范文4000字
<朗读者>的读后感优秀范文4000字: 家,简单一个字,能引起无数人的情感共鸣.因为家是每一个人最初的记忆,也是我们最终的归宿.说小了,它是两个人的结合:说大了,它是乡土中国的基座. 乔治 ...
- 《海底两万里》的读书笔记作文4000字
<海底两万里>的读书笔记作文4000字: <海底两万里>是法国作家凡尔纳的代表作,是著名的"凡尔纳三部曲"的第二部,另外两部是<格兰特船长的儿女> ...
- java 字符串处理流程_一文带你了解Java字符串处理(String,StringBuffer,StringBuild)...
前言本文篇幅较长,但都是满满的干货,请大家耐心观看,相信会有不小的收获.本人在总结的过程中也收获了很多的知识,也希望大家可以一起借鉴学习下,希望大家最后都能有所收获! 再言字符串的分类在java.la ...
- c++string 加引号_一文带你了解Java字符串处理(String,StringBuffer,StringBuild)
前言 本文篇幅较长,但都是满满的干货,请大家耐心观看,相信会有不小的收获.本人在总结的过程中也收获了很多的知识,也希望大家可以一起借鉴学习下,希望大家最后都能有所收获! 再言 字符串的分类在java. ...
- python 把带小数的浮点型字符串转换为整数的解决方案
python 把带小数的浮点型字符串转换为整数的解决方案 参考文章: (1)python 把带小数的浮点型字符串转换为整数的解决方案 (2)https://www.cnblogs.com/mlgjb/ ...
- 读《阿里铁军》有感【4000字】
工作后也可能会被要求写读后感哦!这是我为别人整理的4000字非原创读后感,若对你有用,请点赞.关注我哟! 初读<阿里铁军>这本书,吸引我的不仅仅是此书故事性的阿里发展史,更多的是它背后隐含 ...
- 《自控力》的读后感作文4000字
<自控力>的读后感作文4000字: 1美国心理学协会称,美国人认为缺乏意志力是完成目标的最大绊脚石.人们为了自控,会把自己搞的筋疲力尽,大多数人采取的方法不仅毫无效果,反而适得其反,甚至会 ...
最新文章
- 跟我一起写 Makefile(十二)
- java如何获取一个double的小数位数
- debian添加删除用户
- 浅析bootstrap原理及优缺点
- Redis通讯协议RESP详解
- 保持windows2003域控制器的安全
- deepin efi 启动u盘_如何安装Deepin国产操作系统?只需一个U盘就够了,超简单
- ubuntu16.04安装百度网盘(使用deepin-wine)2019年3月亲测可用以及安装MATLAB的技巧
- dubbo源码解析之服务发布与注册
- 分享39个大数据可视化工具(数据分析必备)
- kubectl管理多个集群配置
- 一键禁用Win10自动更新,联想官方出品!!
- ABAP 关于 delete adjacent duplicates from的小心得
- php在线编辑gif图片,gif动态图片制作,在线制作 GIF动画工具
- Gluster文件系统
- 力扣算法之两矩形求和
- 深度 | 5分钟读懂阿里零售通智慧供应链平台
- 2022秋季C语言专题实验03-一维数组
- WPF教程(二)--Application WPF程序启动方式
- 【第50篇】迈向快速、灵活、稳健的微光图像增强