在日常工作中,计算机处理的 绝大部分数据都是以文本(字符)的形式存在的。
所以,对文本(字符)进行操作处理非常重要。
所谓字符串,就是 由零个或多个字符组成的有限序列。
在Python中,字符串使用 单引号''
或者双引号""
将文本包围起来 的方式来表示。Python 不存在类似于C中的单字符类型char
,单字符在 Python 中也是作为一个字符串使用。
在所有的字符中,有一些特殊的字符不方便直接表示(比如换行、单引号等等),我们需要通过转义(即转换含义)的方式来表示。
Python 用 反斜杠 \
来转义字符。如果想在字符串中表示'
要写成\'
,同理,想表示\
要写成\\
。如下表所示,
如果字符串里面有很多字符都需要转义,就需要加很多\
,为了简化,Python允许 用r''
表示''
内部的字符串 不转义
>>> print('\\\t\\')
\ \
>>> print(r'\\\t\\')
\\\t\\
如果字符串内部有很多换行,用\n
写在一行里不好阅读,为了简化,Python允许用'''...'''
或是"""..."""
的格式表示多行内容
>>> print('''line1
... line2
... line3''')
line1
line2
line3
参考:[干货]Python字符串格式化的四种姿势
我们经常会需要输出一些 格式固定 的字符串,类似于'亲爱的xxx用户,您好!您xx月的话费是xx元,目前账户还剩xx余额。
,其中xxx
的内容是 根据变量变化 的。
Python中,格式化字符串有两种常用的方法,分别为 占位符%
和 format()。前者在 Python2 中用的比较广泛,随着 Python3 的发展,后者现在用的比较多。
和 C语言 中的 printf
函数是一致的。用符号%
连接一个字符串和一组变量,在字符串内部,形如%?
的占位符会用右边变量组中的变量按位置顺序替换,如果只有一个%?
,变量组的括号可以省略。
# %d--将整数,浮点数转化为十进制表示,并将其格式化到指定位置
age = 29
print("my age is %d" % age)
# 输出:my age is 29
# %s--字符串
name = "makes"
print("my name is %s" % name)
# 输出:my name is makes
常见的占位符有:
其中,格式化整数和浮点数还可以指定是否补0和整数与小数的位数
如果你不太确定应该用什么占位符,%s
永远起作用,它会把任何数据类型转换为字符串:
>>> 'Age: %s. Gender: %s' % (25, True)
'Age: 25. Gender: True'
如果我们输出普通的%
字符,这个时候就需要转义,用%%
来表示一个%
:
>>> 'growth rate: %d %%' % 7
'growth rate: 7 %'
参考:
[1] Python3 字符串格式化
[2] Python字符串格式化–format()方法
format()
方法,基本的格式是
<模板字符串>.format(<逗号分隔的参数>)
它会用传入的参数依次替换字符串内的占位符{0}、{1}……,不过这种方式写起来比%要麻烦得多
两种映射方式
format()方法中<模板字符串>的槽除了包括参数索引,还可以包括格式控制信息。此时,槽的内部样式如下:
{
<参数序号>: <格式控制标记>}
格式,包括:<填充><对齐><宽度>,<.精度><类型>6 个字段,这些字段都是可选的,可以组合使用,介绍如下
1).精度
表示两个含义,由小数点(.)开头。对于浮点数,精度表示小数部分输出的有效位数。对于字符串,精度表示输出的最大长度。
"{0:.2f}".format(12345.67890)
Out[29]: '12345.68'
"{0:.4}".format("PYTHON")
Out[30]: 'PYTH'
2)类型
表示输出整数和浮点数类型的格式规则。对于整数类型,输出格式包括6 种:
"{0:b},{0:c},{0:d},{0:o},{0:x},{0:X}".format(425)
Out[32]: '110101001,Ʃ,425,651,1a9,1A9'
对于浮点数类型,输出格式包括4 种:
浮点数输出时尽量使用<.精度>表示小数部分的宽度,有助于更好控制输出格式。
"{0:e},{0:E},{0:f},{0:%}".format(3.14)
Out[33]: '3.140000e+00,3.140000E+00,3.140000,314.000000%'
"{0:.2e},{0:.2E},{0:.2f},{0:.2%}".format(3.14)
Out[34]: '3.14e+00,3.14E+00,3.14,314.00%'
Python格式化字符串f-string概览
f-string 是 python3.6 之后版本添加的,称之为字面量格式化字符串,是新的格式化字符串的语法。
f-string 格式化字符串以 f 开头,后面跟着字符串,字符串中的表达式用大括号 {}
包起来,它会将变量或表达式计算后的值替换进去:
>>> name = 'Runoob'
>>> f'Hello {name}' # 替换变量
>>> f'{1+2}' # 使用表达式
'3'
>>> w = {
'name': 'Runoob', 'url': 'www.runoob.com'}
>>> f'{w["name"]}: {w["url"]}'
'Runoob: www.runoob.com'
这种方式明显更简单。
使用方括号"[]
"来截取字符串
var1 = 'Hello World!'
var2 = "Python Runoob"
print("var1[0]: " + var1[0])
print("var2[1:5]: " + var2[1:5])
# 输出:
# var1[0]: H
# var2[1:5]: ytho
需要注意的是,Python中的字符串是不可变对象,字符串一旦生成就不能被改变,即 不能直接用s[i]=x
的方式改变字符串。
例如我们使用‘+’进行字符串连接,会产生新的字符串,原串不会发生任何变化;使用replace()
进行替换某些字符的时候也是产生新的字符串,不会更改原有字符串。
① “+”号连接(str1 + str2)
'Jim' + 'Green' # 等于'JimGreen'
② ","连接(str1, str2)
用这种方式连接,字符串之间会多出一个空格
'Jim', 'Green' # 等于'Jim Green'
③ 直接放在一起,不加空格或加空格(str1str2)
'Jim''Green' # 等于'JimGreen'
'Jim' 'Green' # 等于'JimGreen'
s = "Hello"
for i in range(len(s)):
s[i].....
# 另一种写法
for c in s:
c......
s = 'jiuzhang'
# NP
result = ''
for i in range(len(s) - 1, -1, -1):
result += s[i]
# P
result = s[::-1]
Python中常用的字符串内建函数有:
str1 = 'hello, world!'
# 字母大小写变换
print(s.lower()) # 将字符串所有字母变为小写,'hello,world'
print(s.upper()) # 将字符串所有字母变为大写,'HELLO,WORLD'
print(s.swapcase()) # 将字符串所有字母大小写互换,'hELLO,wORLD'
str2 = 'abc123456'
# 字母数字判断
print(str2.isdigit()) # 检查字符串是否由数字构成,False
print(str2.isalpha()) # 检查字符串是否以字母构成,False
print(str2.isalnum()) # 检查字符串是否以数字和字母构成,True
参考:python join()和strip()函数用法及其他基础函数用法
以指定的字符连接 序列中的元素,生成一个新的字符串。
>>>li = ['my','name','is','bob']
>>>' '.join(li)
'my name is bob'
>>>'_'.join(li)
'my_name_is_bob'
参考:
[1] Python学习:split()方法以及关于str.split()[0]等形式内容的详细讲解
[2] Python中的split()函数的用法
str.split(str="", num=string.count(str))
以指定字符(分隔符) 对字符串进行切片,并返回分割后的字符串列表(list)
参数:
>>>str = "How are you?";
>>>str.split() # 不带参数,不管几分隔符全部砍掉
['How', 'are', 'you?']
>>>str.split(' ') # 如果出现连续多个,两个分隔符中间就会产生一个空串
['How', '', 'are', '', 'you?']
>>>str.split(" ", 1) # 分割一次,即分割出两个子字符串
['How', ' are you?']
str.strip([chars])
用于移除字符串头尾指定的字符(默认为空格或换行符(\n))或字符序列。
注意:该方法只能删除开头或是结尾的字符,不能删除中间部分的字符。
参数:
>>>str = "00000003210Runoob01230000000";
>>>str.strip( '0' ) # 去除首尾字符 0
3210Runoob0123
>>>str2 = " Runoob "
>>>str2.strip() # 去除首尾空格
Runoob
参考:
[1] Python find()方法 | 菜鸟教程
[2] python中index()、find()方法
print(s.find('lo')) # 3, 返回第一次找到指定字符串的起始位置(从左往右找)
s = None
# 我们不能对空对象做任何操作,除了"=" 和"=="。
s = ""
s = str() # 等价于 s= ''
# s不是空对象,是指向实实在在的堆内存的。只是这段内存中没有数据而已,s此时是个空串。
# 我们可以对s做所有字符串的操作。例如取长度、拼接、替换、查找字符等。
参考资料:
[1] Python 字符串 | 菜鸟教程
[2] 数据类型和变量 - 廖雪峰的官方网站
[3] Python官方Documentation
Python语法基础系列:
【Python】Python语法基础——数据类型
【Python】Python语法基础——分支结构 if、elif、else
【Python】Python语法基础——循环结构 while、for-in【配合range(),enumerate()】,break,continue
【Python】Python语法基础——字符串详解(格式化字符串,字符串基本操作,字符串内置函数)