Python基础-2.字符串

TOC

一、字符串基础

字符串的标注标准:
用单引号''或双引号""表示,使用三引号'''"""可以指定多行字符串。
对于特殊字符可以使用\来进行转义,使用r可以让字符串不发生转义比如:r"this is a line \n"这里的\n将不是换行,而是普通的字符串。
【示例】

# 单行字符串
var1 = 'Hello'
var2 = "World"
# 多行字符串
var3 = '''hello!!!
My name is Jack.
What is your name?'''
var4 = """I am Lucy
How are you?"""

访问字符串的值

Python不支持单字符类型,但是单字符在Python中也是作为一个字符串使用。

普通获取

【示例】代码如下:

string = 'Hello'
# 输出字符串
print('输出字符串:', string)
# 输出字符串多次,比如: 2次
print('输出字符串两次:', string * 2)
''' 运行结果如下
Hello
HelloHello
'''

字符串切片

我们可以通过方括号[]来截取字符串,索引值以0为开始值,-1为从末尾的开始位置。
【示例】代码如下:

string = 's5fdi2der22ji455koy69jiff'
# 输出字符串第一个字符
print('输出字符串第一个字符:', string[0])
# 输出第一个到倒数第二个的所有字符
print('输出第一个到倒数第二个的所有字符:', string[0:-1])
# 输出从第三个开始到第六个的字符(不包含)
print('输出从第三个开始到第六个的字符(不包含):', string[2:5])
# 输出从第三个开始后的所有字符
print('输出从第三个开始后的所有字符:', string[2:])
# 输出从第二个开始到第五个且每隔一个的字符(步长为2)
print('输出从第二个开始到第五个且每隔一个的字符(步长为2):', string[1:5:2])
''' 运行结果如下
输出字符串第一个字符: s
输出第一个到倒数第二个的所有字符: s5fdi2der22ji455koy69jif
输出从第三个开始到第六个的字符(不包含): fdi
输出从第三个开始后的所有字符: fdi2der22ji455koy69jiff
输出从第二个开始到第五个且每隔一个的字符(步长为2): 5d
'''

字符串运算符

在字符串的操作中常用的运算符:

操作符 描述 实例
+ 字符串连接 a + b 输出结果: HelloPython
* 重复输出字符串 a*2 输出结果:HelloHello
[] 通过索引获取字符串中字符 a[1] 输出结果 e
[ : ] 截取字符串中的一部分,遵循左闭右开原则,str[0:2] 是不包含第 3 个字符的。 a[1:4] 输出结果 ell
in 成员运算符 - 如果字符串中包含给定的字符返回 True ’H’ in a 输出结果 True
not in 成员运算符 - 如果字符串中不包含给定的字符返回 True ’M’ not in a 输出结果 True
r/R 原始字符串 - 原始字符串:所有的字符串都是直接按照字面的意思来使用,没有转义特殊或不能打印的字符。 原始字符串除在字符串的第一个引号前加上字母 r(可以大小写)以外,与普通字符串有着几乎完全相同的语法。 print( r’\n’ )
print( R’\n’ )
% 格式字符串 请看下一节内容。

1.字符串拼接

可以通过+来对于多个字符串进行拼接。
【示例】代码如下:

a, b = "Hello", "Python"
# 字符串相加拼接
print('a + b的结果为:', a + b)
# 重复多次输出字符串,以下为2次
print('a * 2的结果为:', a * 2)
''' 运行结果如下
a + b的结果为: HelloPython
a * 2的结果为: HelloHello
'''

2.字符串长度

可以通过len()函数来统计字符串的长度。
【示例】代码如下:

string = 'Hello Python!!!'
print('string字符串的长度为:', len(string))
''' 运行结果如下
string字符串的长度为: 15
'''

3.字符串判断

可以通过成员运算符判断字符是否存在于字符串中。
【示例】代码如下:

a = "Hello Python"
# 判断'H'是否在变量a中
if "H" in a:
    print("H 在变量 a 中")
else:
    print("H 不在变量 a 中")
# 判断'M'是否不在在变量a中
if "M" not in a:
    print("M 不在变量 a 中")
else:
    print("M 在变量 a 中")
''' 运行结果如下
H 在变量 a 中
M 不在变量 a 中
'''

二、转义字符

在需要在字符中使用特殊字符时,python用反斜杠\转义字符。

转义字符列表

转义符 含义 示例 输出结果
\ 反斜杠本身 print(“C:\Users\admin”) C:\Users\admin
单引号 print(‘It’s ok’) It’s ok
" 双引号 print(“He said: “Hello””) He said: “Hello”
\n 换行 print(“Hello\nWorld”) HelloWorld
\t 水平制表符(Tab) print(“Name\tAge”) Name    Age
\r 回车(光标回到行首) print(“Hello\rWorld”) World(覆盖前面)
\b 退格(删除前一个字符) print(“Hello\b!”) Hell!
\f 换页 print(“Hello\fWorld”) HelloWorld(效果依环境不同)
\v 垂直制表符 print(“Hello\vWorld”) HelloWorld(效果依环境不同)
\a 响铃 print("\a") 终端响铃(可能无效)

转义符使用示例

以下示例使用了不同转义符
【示例】代码如下:

# 使用 \n 换行
print("----------- 使用 \\n ---------------")
print("Hello\nWorld")

# 使用 \t 制表符
print("----------- 使用 \\t ---------------")
print("Name\tAge")

# 使用 \\ 输出反斜杠
print("----------- 使用 \\\\ ---------------")
print("C:\\Users\\admin")

# 使用 \' 输出单引号
print("----------- 使用 \\' ---------------")
print('It\'s a book')

# 使用 \" 输出双引号
print("----------- 使用 \\\" ---------------")
print("He said: \"Hello\"")

# 使用 \r 回车
print("----------- 使用 \\r ---------------")
print("Hello\rWorld")

# 使用 \b 退格
print("----------- 使用 \\b ---------------")
print("Hello\b!")

# 使用 \f 换页
print("----------- 使用 \\f ---------------")
print("Hello\fWorld")

# 使用 \v 垂直制表符
print("----------- 使用 \\v ---------------")
print("Hello\vWorld")

# 使用 \a 响铃
print("----------- 使用 \\a ---------------")
print("Beep!\a")

# 使用 \ooo 八进制表示
print("----------- 使用 \\ooo ---------------")
print("\141\142\143")

# 使用 \xhh 十六进制表示
print("----------- 使用 \\xhh ---------------")
print("\x61\x62\x63")

# 使用 \uXXXX Unicode 表示
print("----------- 使用 \\uXXXX ---------------")
print("\u4F60\u597D")  # 你好

# 使用 \UXXXXXXXX Unicode 表示
print("----------- 使用 \\UXXXXXXXX ---------------")
print("\U0001F600")  # 😀

# 使用 \N{name} Unicode 名称
print("----------- 使用 \\N{name} ---------------")
print("\N{BLACK HEART SUIT}")
'''运行结果如下
----------- 使用 \n ---------------
Hello
World
----------- 使用 \t ---------------
Name	Age
----------- 使用 \\ ---------------
C:\Users\admin
----------- 使用 \' ---------------
It's a book
----------- 使用 \" ---------------
He said: "Hello"
----------- 使用 \r ---------------
World
----------- 使用 \b ---------------
Hell!
----------- 使用 \f ---------------
HelloWorld
----------- 使用 \v ---------------
HelloWorld
----------- 使用 \a ---------------
Beep!
----------- 使用 \ooo ---------------
abc
----------- 使用 \xhh ---------------
abc
----------- 使用 \uXXXX ---------------
你好
----------- 使用 \UXXXXXXXX ---------------
😀
----------- 使用 \N{name} ---------------
♥
'''

三、字符串格式化

旧式字符串格式化

Python支持格式化字符串的输出,就是使用%s等符号代替变量,在后续中定义变量的值,插入到一个字符串中%s等特殊符号的位置中。
【示例】

print("我的名字是: %s,我的岁数: %d" % ('天天', 18))
'''运行结果如下
我的名字是: 天天,我的岁数: 18
'''

%操作符可以实现字符串格式化, 它将左边的参数作为类似sprintf()式的格式化字符串, 而将右边的代入, 然后返回格式化后的字符串。
常用的操作符有:

  • %s:字符串 (使用 str() 转换)
  • %d:整数 (使用 int() 转换)
  • %u:格式化无符号整型
  • %f:浮点数 (使用 float() 转换)
  • %o:格式化无符号八进制数
  • %x:十六进制整数 (使用 hex() 转换)
  • %X:格式化无符号十六进制数(大写)
  • %e:用科学计数法格式化浮点数
  • %E: 作用同%e,用科学计数法格式化浮点数
  • %%:表示 % 字符本身

f-string方法

f-string是python3.6之后版本添加的,称之为字面量格式化字符串,是新的格式化字符串的语法。
使用方法f-string格式化字符串以f开头,后面跟着字符串,字符串中的表达式用大括号{}包起来,它会将变量或表达式计算后的值替换进去。
【示例】定义几个变量,在字符串中使用f-string方法引用

name = 'Jackson'
age = 18
city = 'Manhattan'
print(f'我的名字叫 {name},今年 {age} 岁,我生活在 {city}')
'''运行结果如下
我的名字叫 Jackson,今年 18 岁,我生活在 Manhattan
'''

format方法

如果你希望输出的形式更加多样,可以使用 str.format() 函数来格式化输出值。

1.等位替换

括号及其里面的字符 (称作格式化字段) 将会被format()中的参数替换
【示例】代码如下:

print('{}网址为: "{}!"'.format('百度', 'www.baidu.com'))  # 结果为: 百度网址: "www.baidu.com!"

2.指定替换位置

在括号中的数字用于指向传入对象在format()中的位置
【示例】代码如下:

print('{0} 和 {1}'.format('小红', '小明'))  # 结果为: 小红 和 小明
print('{1} 和 {0}'.format('小红', '小明'))  # 结果为: 小明 和 小红

3.关键字替换

format()中使用了关键字参数, 那么它们的值会指向使用该名字的参数
【示例】代码如下:

print('{name}网址为: "{url}!"'.format(name='百度', url='www.baidu.com'))  # 结果为: 百度网址: "www.baidu.com!"

【示例】位置及关键字参数可以任意的结合,如下所示:

print('{1} 和 {0} 和 {name}'.format('小红', '小明', name='小刚'))  # 结果为: 小明 和 小红 和 小刚

4.进阶使用

可选项 : 和格式标识符可以跟着字段名。这就允许对值进行更好的格式化。f为保留小数点后几位,d 为保证该域至少有这么多的宽度。用于美化表格时很有用。

pi = 3.141592653589793
num = {'a': 1, 'b': 2, 'c': 3}
print('常量pi的值保留小数点后三位为: {0:.3f}'.format(pi))  # 结果为 : 常量pi的值保留小数点后三位为: 3.142
for name, number in num.items():
    print('{0:5} ==> {1:5d}'.format(name, number))
'''
结果为 :
a     ==>     1
b     ==>     2
c     ==>     3
'''

rjust,ljust,center和zfill方法

  • rjust()方法:它可以将字符串靠右,并在左边填充空格。
  • ljust()方法:它可以将字符串靠左,并在右边填充空格。
  • center()方法:它可以将字符串居中,并在两边填充空格。

【示例】代码如下:

# 举例输出1到10的平方和立方的表  
for x in range(1, 11):
    print(repr(x).rjust(2), repr(x*x).rjust(3), end=' ')
    # 注意前一行 'end' 的使用
    print(repr(x*x*x).rjust(4))
# 也可以以下的方式输出
for x in range(1, 11):
    print('{0:2d} {1:3d} {2:4d}'.format(x, x*x, x*x*x))
# zfill()方法,它会在数字的左边填充 0。
a = '12'
b = a.zfill(5)