Python字符串是一种数据类型,用于存储和操作文本数据。它可以包含任意字符,如字母、数字、符号和空格。在Python中,字符串是不可变的,意味着一旦创建,就不能更改其内容。
在Python中,字符串可以通过单引号、双引号或三引号来创建。
str1 = 'hello world'
print(str1) # 输出:hello world
str2 = "Python is awesome"
print(str2) # 输出:Python is awesome
str3 = '''hello world
python'''
print(str3)
# 输出:
# hello world
# python
# 注意,使用三引号创建的字符串可以跨越多行,打印时会保留原始的换行符。
无论使用哪种方式创建字符串,一旦创建后就不能更改其内容。例如:
str1 = 'hello world'
str1[0] = 'H' # 会报错,因为字符串是不可变的
如果需要修改字符串中的某个字符,可以通过创建一个新的字符串并赋值给原始字符串变量来实现。
str1 = 'hello world'
str1 = 'Hello' # 创建一个新的字符串并赋值给str1
print(str1) # 输出:Hello
如果两个字符串完全一样,可以写成这样:
str1 = 'hello'
str2 = str1 # 将str2赋值给str1
print(str2) # 输出:hello
在 Python 中,可以通过使用下标(索引)来访问字符串中的值。字符串中的每个字符都有一个对应的下标,从 0 开始递增。
str = 'hello'
print(str[0]) # 输出:h
print(str[1]) # 输出:e
print(str[2]) # 输出:l
print(str[3]) # 输出:l
print(str[4]) # 输出:o
需要注意的是,Python 中的字符串是不可变的,因此不能直接通过下标来修改字符串中的字符。如果尝试这样做,会导致 TypeError 错误。
与下标索引不同的是,切片允许你访问字符串中的多个字符。你可以指定一个起始下标和一个终止下标,然后 Python 将返回该范围内的所有字符。
str = 'hello'
print(str[1:4]) # 输出:ell
在这个示例中,我们使用切片 [1:4] 访问字符串 str 中的一部分。这将返回从下标 1 到下标 3 (不包括 4)之间的所有字符。
需要注意的是,切片操作也不会修改原始字符串,而是返回一个新的字符串。因此,Python 的字符串仍然是不可变的。
转义字符是由反斜杠 \ 后面跟着一个特定字符组成的。
# 续行符
print("xiao \
bu \
ding") # 输出xiao bu ding
# 反斜杠
print('C:\\path\\to\\file') # 输出C:\path\to\file
# 单引号
print('He said, "Hello!"') # 输出He said, "Hello!"
# 双引号
print("She's happy.") # 输出She's happy.
当你在字符串中使用 \a,它会触发系统发出一个声音或者其他与响铃相关的行为。
但是需要注意的是,不是所有的终端或操作系统都会对 \a 响铃字符做出声音或其他反应。有些终端会忽略它,而有些终端可能会发出嘀嗒声、闪烁光标或其他形式的提示。
# 响铃
print('Hello \a World')
# 退格
print("Hello \b World!") # 输出Hello World!
# 空
print("\000")
# 换行符
print('Hello\nWorld')
# Hello
# World
纵向制表符 \v 用于在文本中创建垂直制表位,可以使后续文本在输出时垂直对齐。然而,大多数终端对纵向制表符的显示效果可能与预期不符,可能会被忽略或以其他方式处理。
# 纵向制表符
print('Hello\vWorld') # 可能无法正常显示纵向制表符
横向制表符 \t 用于在文本中创建水平制表位,可以将后续文本对齐到下一个制表符位置。在终端上,横向制表符通常会将光标移动到下一个制表符位置,以实现对齐效果。
# 横向制表符
print('Name\tAge') # 输出Name Age
# 回车
print("Hello\rWorld!") # 输出World!
使用 \r 实现百分比进度
import time
for i in range(21):
print("\r{:3}%".format(i),end=' ')
time.sleep(0.05)
\f 是一个转义字符,表示换页符。它在输出中会产生特殊效果,将光标移动到下一页或下一页面的开头位置。
然而,在大多数终端和文本编辑器中,默认情况下,换页符 \f 的效果可能不明显或不可见。因此,print(“Hello \f World!”) 在大多数情况下会与 print(“Hello World!”) 产生相同的输出结果。
# 换页
print("Hello \f World!") # 输出Hello World!
八进制数,y 代表 0~7 的字符,例如:\012 代表换行。
# 八进制数
print("\110\145\154\154\157\40\127\157\162\154\144\41") # 输出Hello World!
十六进制数,以 \x 开头,y 代表的字符,例如:\x0a 代表换行
# 十六进制数
print("\x48\x65\x6c\x6c\x6f\x20\x57\x6f\x72\x6c\x64\x21") # 输出Hello World!
a = "Hello"
b = "World"
print("a + b 输出结果:", a + b) # a + b 输出结果: HelloWorld
a = "Hello"
b = "World"
print("a * 2 输出结果:", a * 2) # a * 2 输出结果: HelloHello
a = "Hello"
print("a[1] 输出结果:", a[1]) # a[1] 输出结果: e
截取字符串中的一部分,遵循左闭右开原则,a[1:4] 是不包含第 4 个字符的。
a = "Hello"
b = "World"
print("a[1:4] 输出结果:", a[1:4]) # a[1:4] 输出结果: ell
in成员运算符 - 如果字符串中包含给定的字符返回 True
not in成员运算符 - 如果字符串中不包含给定的字符返回 True
a = "Hello"
if( "H" in a) :
print("H 在变量 a 中")
else :
print("H 不在变量 a 中")
if( "M" not in a) :
print("M 不在变量 a 中")
else :
print("M 在变量 a 中")
在 Python 中,前缀为 r 或 R 的字符串表示原始字符串,不会对反斜杠进行转义处理。因此,print( r’\n’ ) 和 print( R’\n’ ) 的输出结果都将是 \n,而不会被解释为换行符。
print( r'\n' ) # 输出 \n
print( R'\n' ) # 输出 \n
Python 支持格式化字符串的输出 。尽管这样可能会用到非常复杂的表达式,但最基本的用法是将一个值插入到一个有字符串格式符 %s 的字符串中。
在 Python 中,字符串格式化使用与 C 中 sprintf 函数一样的语法。
name = "Alice"
age = 25
print("My name is %s and I am %d years old." % (name, age)) # My name is Alice and I am 25 years old.
剩下的就不一一列举了,有兴趣的研究下。
符号 | 描述 |
---|---|
%c | 格式化字符及其ASCII码 |
%s | 格式化字符串 |
%d | 格式化整数 |
%u | 格式化无符号整型 |
%o | 格式化无符号八进制数 |
%x | 格式化无符号十六进制数 |
%X | 格式化无符号十六进制数(大写) |
%f | 格式化浮点数字,可指定小数点后的精度 |
%e | 用科学计数法格式化浮点数 |
%E | 作用同%e,用科学计数法格式化浮点数 |
%g | %f和%e的简写 |
%G | %f 和 %E 的简写 |
%p | 用十六进制数格式化变量的地址 |
符合 | 功能 |
---|---|
* | 定义宽度或者小数点精度 |
- | 用作左对齐 |
+ | 在正数前面显示加号 |
在正数前面显示空格 | |
# | 在八进制前面显示零(‘0’),在十六进制前面显示’0x’或者’0X’ |
0 | 显示的数字前面填充’0’而不是默认的空格 |
% | ‘%%‘输出一个单一的’%’ |
(var) | 映射变量(字典参数) |
m.n. | m是显示的最小总宽度,n是小数点后的位数(如果可用的话) |
这里举一个实例来说明*的作用:
当使用*符号作为格式化操作符的辅助指令时,它可以用来动态定义宽度或者小数点精度。这意味着你可以在运行时指定宽度或者小数点精度的数值。
width = 10
precision = 4
value = 123.456789
print("The value is: %*.*f" % (width, precision, value))
# 输出:The value is: 123.4568
在这个示例中,%*.f中的两个分别代表宽度和小数点精度。在字符串之后的%后面,我们使用元组(width, precision, value)来动态传入宽度和小数点精度的值。因此,width的值被用来定义输出的宽度,precision的值被用来定义小数点后的位数。
f-string 是 python3.6 之后版本添加的,f-string是一种字符串格式化的方式,可以在字符串中嵌入变量、表达式和函数的值。
f-string使用的语法是在字符串前面加上字母"f"或"F",然后用花括号{}包裹要插入的变量、表达式或函数的值。
在下面的示例中,我们使用f-string将name和age的值插入到字符串中。
name = "Alice"
age = 25
print(f"My name is {name} and I am {age} years old.")
# 输出:My name is Alice and I am 25 years old.
在下面的示例中,我们使用f-string将表达式num1 + num2的结果插入到字符串中。
num1 = 10
num2 = 5
print(f"The sum of {num1} and {num2} is {num1 + num2}.")
# 输出:The sum of 10 and 5 is 15.
在下面的示例中,我们使用f-string将函数double的返回值插入到字符串中。
def double(x):
return 2 * x
num = 5
print(f"Double of {num} is {double(num)}.")
# 输出:Double of 5 is 10.
在下面的示例中,我们使用f-string将格式化后的total值插入到字符串中,保留两位小数并加上美元符号。
price = 3.99
quantity = 2
total = price * quantity
print(f"The total is ${total:.2f}.")
# 输出:The total is $7.98.
在 Python 3.10 版本中,一共有 40 个字符串内建函数,这里选几个常用的进行介绍。
获取字符串的长度。
string = "Hello, world!"
print(len(string))
# 输出:13
将其他类型的变量转换为字符串类型。
num = 123
string = str(num)
print(string)
# 输出:"123"
将字符串中所有的大写字母转换为小写字母
string = "HeLLo, WoRLd!"
print(string.lower())
# 输出:"hello, world!"
将字符串中所有的小写字母转换为大写字母。
string = "HeLLo, WoRLd!"
print(string.upper())
# 输出:"HELLO, WORLD!"
去除字符串开头和结尾的空格或指定字符。
string = "###Hello, world!###"
print(string.strip("#"))
# 输出:"Hello, world!"
替换字符串中的某个子串。
string = "Hello, world!"
print(string.replace("world", "Python"))
# 输出:"Hello, Python!"
将字符串按一个分隔符分割成多个子串,并返回一个列表。
string = "Hello, world!"
print(string.split(", "))
# 输出:["Hello", "world!"]
将多个字符串连接成一个字符串。
list = ["Hello", "world!"]
print(", ".join(list))
# 输出:"Hello, world!"
判断字符串是否以某个子串开头。
string = "Hello, world!"
print(string.startswith("Hello"))
# 输出:True
判断字符串是否以某个子串结尾。
string = "Hello, world!"
print(string.endswith("world!"))
# 输出:True
需要注意的是,Python字符串内建函数的返回值通常是一个新的字符串对象,原字符串不会被修改。如果需要修改字符串本身,可以使用字符串的赋值操作或者其他相关操作。
今天主要讲了Python的字符串的相关内容。
感谢你的观看,谢谢!