【Python】Python语法基础——字符串详解(格式化字符串,字符串基本操作,字符串内置函数)

在日常工作中,计算机处理的 绝大部分数据都是以文本(字符)的形式存在的

所以,对文本(字符)进行操作处理非常重要。

所谓字符串,就是 由零个或多个字符组成的有限序列


在Python中,字符串使用 单引号''或者双引号""将文本包围起来 的方式来表示。Python 不存在类似于C中的单字符类型char,单字符在 Python 中也是作为一个字符串使用

转义字符

在所有的字符中,有一些特殊的字符不方便直接表示(比如换行、单引号等等),我们需要通过转义(即转换含义)的方式来表示。

Python 用 反斜杠 \ 来转义字符。如果想在字符串中表示'要写成\',同理,想表示\要写成\\。如下表所示,
【Python】Python语法基础——字符串详解(格式化字符串,字符串基本操作,字符串内置函数)_第1张图片

如果字符串里面有很多字符都需要转义,就需要加很多\,为了简化,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

常见的占位符有:
【Python】Python语法基础——字符串详解(格式化字符串,字符串基本操作,字符串内置函数)_第2张图片
其中,格式化整数和浮点数还可以指定是否补0和整数与小数的位数

如果你不太确定应该用什么占位符,%s永远起作用,它会把任何数据类型转换为字符串:

>>> 'Age: %s. Gender: %s' % (25, True)
'Age: 25. Gender: True'

如果我们输出普通的%字符,这个时候就需要转义,用%%来表示一个%

>>> 'growth rate: %d %%' % 7
'growth rate: 7 %'

② format()

参考:
[1] Python3 字符串格式化
[2] Python字符串格式化–format()方法

format()方法,基本的格式是

<模板字符串>.format(<逗号分隔的参数>)

它会用传入的参数依次替换字符串内的占位符{0}、{1}……,不过这种方式写起来比%要麻烦得多

两种映射方式

1)位置映射
【Python】Python语法基础——字符串详解(格式化字符串,字符串基本操作,字符串内置函数)_第3张图片
2)关键字映射

参数从 0 开始编号,支持重复使用
【Python】Python语法基础——字符串详解(格式化字符串,字符串基本操作,字符串内置函数)_第4张图片
格式控制

format()方法中<模板字符串>的槽除了包括参数索引,还可以包括格式控制信息。此时,槽的内部样式如下:

{
     <参数序号>: <格式控制标记>}

格式,包括:<填充><对齐><宽度>,<.精度><类型>6 个字段,这些字段都是可选的,可以组合使用,介绍如下
【Python】Python语法基础——字符串详解(格式化字符串,字符串基本操作,字符串内置函数)_第5张图片
1).精度

表示两个含义,由小数点(.)开头。对于浮点数,精度表示小数部分输出的有效位数。对于字符串,精度表示输出的最大长度。

"{0:.2f}".format(12345.67890)
Out[29]: '12345.68'

"{0:.4}".format("PYTHON")
Out[30]: 'PYTH'

2)类型

表示输出整数和浮点数类型的格式规则。对于整数类型,输出格式包括6 种:

  • b: 输出整数的二进制方式;
  • c: 输出整数对应的 Unicode 字符;
  • d: 输出整数的十进制方式;
  • o: 输出整数的八进制方式;
  • x: 输出整数的小写十六进制方式;
  • X: 输出整数的大写十六进制方式;
"{0:b},{0:c},{0:d},{0:o},{0:x},{0:X}".format(425)
Out[32]: '110101001,Ʃ,425,651,1a9,1A9'

对于浮点数类型,输出格式包括4 种:

  • e: 输出浮点数对应的小写字母 e 的指数形式;
  • E: 输出浮点数对应的大写字母 E 的指数形式;
  • f: 输出浮点数的标准浮点形式;
  • %: 输出浮点数的百分形式。

浮点数输出时尽量使用<.精度>表示小数部分的宽度,有助于更好控制输出格式。

"{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%'

③ f-string

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'

这种方式明显更简单。

字符串基本操作

1、访问字符串中的值

使用方括号"[]"来截取字符串

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() 进行替换某些字符的时候也是产生新的字符串,不会更改原有字符串。

2、连接字符串

① “+”号连接(str1 + str2)

'Jim' + 'Green' # 等于'JimGreen'

② ","连接(str1, str2)

用这种方式连接,字符串之间会多出一个空格

'Jim', 'Green' # 等于'Jim Green'

直接放在一起,不加空格或加空格(str1str2)

'Jim''Green' # 等于'JimGreen'
'Jim' 'Green' # 等于'JimGreen'

3、字符串遍历的两种方式

s = "Hello"
for i in range(len(s)):
    s[i].....
# 另一种写法
for c in s:
    c......

4、反转字符串

s = 'jiuzhang'

# NP
result = ''
for i in range(len(s) - 1, -1, -1):
	result += s[i]

# P
result = s[::-1]

字符串内置函数

Python中常用的字符串内建函数有:

1、“字母数字”相关函数方法

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

2、字符串连接方法 .join()

参考:python join()和strip()函数用法及其他基础函数用法

以指定的字符连接 序列中的元素,生成一个新的字符串。

>>>li = ['my','name','is','bob'] 
>>>' '.join(li) 
'my name is bob' 
>>>'_'.join(li) 
'my_name_is_bob' 

3、字符串拆分方法 .split()

参考:
[1] Python学习:split()方法以及关于str.split()[0]等形式内容的详细讲解
[2] Python中的split()函数的用法

str.split(str="", num=string.count(str))

以指定字符(分隔符) 对字符串进行切片,并返回分割后的字符串列表(list)

参数:

  • str – 分隔符。默认为所有的空字符,包括空格、换行(\n)、制表符(\t)等。
  • num – 分割次数,即分割成 num+1 个子字符串。默认分隔所有。
>>>str = "How  are  you?";
>>>str.split()  # 不带参数,不管几分隔符全部砍掉
['How', 'are', 'you?']
>>>str.split(' ')  # 如果出现连续多个,两个分隔符中间就会产生一个空串
['How', '', 'are', '', 'you?']
>>>str.split(" ", 1)  # 分割一次,即分割出两个子字符串
['How', ' are  you?']

4、移除首尾的指定字符串 .strip()

str.strip([chars])

用于移除字符串头尾指定的字符(默认为空格或换行符(\n))或字符序列。

注意:该方法只能删除开头或是结尾的字符,不能删除中间部分的字符。

参数:

  • 指定的要从字符串头尾移除的字符序列。
>>>str = "00000003210Runoob01230000000";
>>>str.strip( '0' )  # 去除首尾字符 0
3210Runoob0123
>>>str2 = "   Runoob      "
>>>str2.strip()  # 去除首尾空格
Runoob

5、查找字符串 find()

参考:
[1] Python find()方法 | 菜鸟教程
[2] python中index()、find()方法

print(s.find('lo')) # 3, 返回第一次找到指定字符串的起始位置(从左往右找)

其他

空对象None 和 空串""的区别

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语法基础——字符串详解(格式化字符串,字符串基本操作,字符串内置函数)

你可能感兴趣的:(Python)