目录
一、字符串的简介
字符串(String)是计算机编程中最基本且常用的数据类型之一,用于表示文本数据。它由一系列字符(字母、数字、符号或空格)组成,通常以特定的编码方式(如ASCII、Unicode)存储。
二、字符串的定义
(1)字符串是由字符序列组成的不可变数据类型。
(2)在代码中,字符串通常用引号包裹:
- 单引号:'
Hello' - 双引号:
"World"
-
三引号:用于多行字符串('''
多行文本''' 或"""多行文本""")。
三. 字符串的特性
(1) 不可变性
- 字符串一旦创建,内容不可修改。每次操作都会生成新字符串。
s = "abc"
s += "d" # 实际上是创建了新字符串"abcd"
print(s)
(2) 索引和切片:
- 可以通过索引访问字符(从0开始),或通过切片获取子字符串。
s = "Python"
print(s[0]) # 输出 'P'
print(s[2:5]) # 输出 'tho'
(3) 长度:
使用函数获取字符数量:
s = "Python"
print(len(s)) #输出结果是 6
四·、内置函数
| 类型 | 方法 | 描述 |
| 字符串 转换函数 | string.capitalize() | 将 sting.的第一个字符转换成大写 |
| string.lower() | 将sting 中所有大写字符为转换为小写 | |
| string.upper() | 将 string 中所有大写字符为转换为大写 | |
| string.swapcase() | 将 string中所有字符大小写翻转 | |
| string.center(width) | 将string字符串扩充至 width长度,原字符串居中,两边填充空格 | |
| string.format(str) | 将 st格式化为指定的string 模式 | |
| 字符串处理函数 | string.strip(str) | 将sting的左右两边指定字符去掉 |
| string.replace(strl,str2) | 将string 中的 strl 替换成 str2 | |
| string.split(str="") | 将string切片,str 为分隔符 | |
| string.join(seq) | 以string 作为分隔符,将seq中所有的元素(的字符串表示)合并为一 | |
| 字符串 判断 函数 | string.fnd(str) | 检测str是否包含在sting中,如果是返回开始的索引值,否则返回-1 |
| string.isalnum() | 如果 string至少有一个字符,并且所有字符都是字母或数字则返回 True,否则返回False | |
| string.isalpha() | 如果 sting至少有一个字符,并且所有字符都是字母则返回 True,否则返回 False | |
| string.isdecimal() | 如果 string 只包含十进制数字,则返回 True,否则返回 False. | |
| string.isnumeric() | 如果 string中只包含数字字符,则返回True,否则返回False | |
| string.startswith(obj) | 检查字符串是否是以obj开头,是则返回True,否则返回False。 | |
| string.endswith(obj) | 检查字符串是否以obj结束,如果是,返回True,否则返回False. | |
| string.count(str) | 返回str在 string中出现的次数 |
五、常见操作
(1)拼接:连接多个字符串。
s1 = "Hello"; s2 = "World"
result = s1 + " " + s2 # "Hello World"
print(result) #输出 Hello World
(2)分割:按分隔符拆分为列表。
s = "苹果,菠萝,西瓜"
words = s.split(",")
print(words) #输出 ['苹果,菠萝,西瓜']
print(type(words)) # <class 'list'>
print(type(words[0])) # <class 'str'>
s = "apple,banana,orange"
fruits = s.split(",")
print(fruits) #输出 ["apple", "banana", "orange"]
print(type(fruits )) # <class 'list'>
print(type(fruits [0])) # <class 'str'>
这是输出结果:

我刚觉得这两个结果数据类型不一样,但是输出的数据类型是一样的,我们来讨论这是为什么呢?问题在于原始字符串使用中文逗号(,)分隔,但用英文逗号(,)调用 split(","),则分割会失败。如果我们查看第一个元素的数据类型会怎么样呢?让我们来试试。
s = "苹果,菠萝,西瓜"
words = s.split(",")
print(words) #输出 ['苹果,菠萝,西瓜']
print(type(words)) # <class 'list'>
print(type(words[1])) # <class 'str'>
输出结果:

结果报错了耶,因为这时候列表 '苹果,菠萝,西瓜' 是一个未分割的字符串。
如果我们把 ‘ s = "苹果,菠萝,西瓜" ’中的中文逗号改成英文逗号会怎么样呢?让我们来试试。
s = "苹果,菠萝,西瓜"
words = s.split(",")
print(words) #输出 ['苹果,菠萝,西瓜']
print(type(words)) # <class 'list'>
print(type(words[1])) # <class 'str'>
输出结果:

这时候输出的结果是对的,所以我们一定要注意中英文符号使用。
(3)查找与替换:
s = "hello world"
print(s.find("world")) # 找到索引位置
print(s.replace("world", "Python")) # 替换子串
输出结果:

(4)大小写转换:
s = "Hello"
print(s.lower()) # "hello"
print(s.upper()) # "HELLO"
六、字符串格式化
虽然前面讲过了,但是我们现在来在仔细的研究研究。
1、字符串 format() 方法的基本使用格式是:<模版字符串>.format(<逗号分割的参数>)
它灵活且兼容性强的格式化方式,支持复杂场景。
(1)位置参数
print("{} bought {} apples.".format("Alice", 3)) # Alice bought 3 apples.
(2)关键字参数
print("{name} likes {color}.".format(name="I", color="blue")) # I likes blue.
(3)索引复用
在 Python 的 str.format() 方法中,字符串中的 {0}、{1}、{2} 等占位符对应的是传递给 format() 方法的参数的位置索引(从 0 开始计数)。
print("{0} + {0} = {1}".format(2, 4)) # 2 + 2 = 4
print("{1} + {1} = {2}".format(4, 8,16)) # 8 + 8 = 16
(4)格式规范----常见的格式化语法
# 数字格式
print("价格: ¥{:.2f}".format(19.99)) # 价格: ¥19.99
# 对齐与填充
print("{:<10}|{:^10}|{:>10}".format("左", "中", "右")) # 左 | 中 | 右
# 进制转换
print("二进制: {:b}".format(255)) # 二进制: 11111111
2、 f-string
基本格式:f"{变量:格式}"
最简洁、高效的格式化方式,直接在字符串中嵌入变量和表达式。
(1)基础用法
name = "Alice"
age = 18
print(f"{name} is {age} years old.") # Alice is 18 years old.
(2)表达式和函数调用
age = 25
# 数学运算
print(f"Next year: {age + 1}") # Next year: 26
# 调用方法
text = "HELLO"
print(f"{text.lower()} world") # hello world
# 直接使用对象属性
class User:
def __init__(self, name):
self.name = name
user = User("Bob")
print(f"User: {user.name}") # User: Bob
(3)格式控制
price = 19.99
num = 1000000
# 数字格式
print(f"价格: ¥{price:.2f}") # 价格: ¥19.99(保留2位小数)
print(f"科学计数: {price:.2e}") # 科学计数: 1.00e+01
print(f"千分位: {num:,}") # 千分位: 1,000,000
# 对齐与填充
print(f"{'左对齐':<15}") # 左对齐
print(f"{'右对齐':>15}") # 右对齐
print(f"{'居中':^15}") # 居中
# 进制转换
n = 255
print(f"十六进制: {n:#x}") # 十六进制: 0xff
print(f"二进制: {n:b}") # 二进制: 11111111
运行结果:

(4)转义特殊字符
# 输出大括号
print(f"{{Hello}}") # {Hello}
# 输出反斜杠(需结合普通字符串)
path = "C:\\Users"
print(f"路径: {path}") # 路径: C:\Users
3、旧式 % 格式化
适用于旧代码或简单场景。
# 基础用法
print("Name: %s, Age: %d" % ("Alice", 18)) # Name: Alice, Age: 18
# 字典参数
data = {"name": "Bob", "age": 20}
print("Name: %(name)s, Age: %(age)d" % data) # Name: Bob, Age: 20
# 格式控制
print("价格: ¥%.2f" % 19.99) # 价格: ¥19.99
4、模板字符串
适用于用户输入等安全敏感场景,防止注入攻击。
from string import Template
t = Template("$name is $age years old.")
print(t.substitute(name="Alice", age=25)) # Alice is 25 years old.
# 安全处理缺失键
print(t.safe_substitute(name="Bob")) # Bob is $age years old.
Template 是 string 模块提供的一个字符串模板工具,用于实现安全的字符串替换(尤其适用于处理用户输入的动态内容)。
-
substitute():严格替换,若变量未提供会抛出KeyError。 -
safe_substitute():安全替换,缺失变量保留原占位符。
| 方法 | 特点 |
|---|---|
str.format() | 功能强大,支持复杂格式(如对齐、数字格式化),但需防范注入风险。 |
f-string | 高效直观,直接内嵌变量,但动态内容需谨慎处理。 |
Template | 简单安全,适合处理不可信输入(如用户输入),语法简洁($ 占位符)。 |
七、转义符
| 转义符 | 描述 | 示例 |
|---|---|---|
| \n | 换行符 | "Line1\nLine2" |
| \t | 制表符(Tab) | "Name:\tAlice" |
| \\ | 反斜杠本身 | "C:\\Users" |
| \" | 双引号(在双引号字符串内) | "He said: \"Hello\"" |
| \' | 单引号(在单引号字符串内) | 'It\'s mine' |
| \r | 回车符(光标回到行首) | "Loading...\rDone!" |
| \b | 退格符(删除前一个字符) | "Hello\b World" → "Hell World" |
| \xHH | 十六进制编码的字符 | "\x41" → "A" |
| \uXXXX | Unicode 字符(4位十六进制) | "\u00A9" → "©" |
| \uXXXXXXXX | Unicode 字符(8位十六进制) | "\U0001F600" → "😀" |
(1)换行与缩进
print("第一行\n第二行\t缩进")
# 输出:
# 第一行
# 第二行 缩进
(2)字符串中包含引号
# 双引号字符串内使用双引号
text1 = "他说:\"你好!\"" # 他说:"你好!"
# 单引号字符串内使用单引号
text2 = 'It\'s a pen.' # It's a pen.
(3)文件路径处理
# Windows路径(需转义反斜杠)
path1 = "C:\\Users\\Alice\\file.txt" # C:\Users\Alice\file.txt
# 使用原始字符串(推荐)
path2 = r"C:\Users\Alice\file.txt" # C:\Users\Alice\file.txt
在字符串前加 r 或 R,禁用转义符功能,直接显示原始内容:
(4)特殊字符编码
print("版权符号:\u00A9") # 输出:版权符号:©
print("笑脸表情:\U0001F600") # 输出:笑脸表情:😀
八、补充
| 操作 | Python 方法 | 示例 |
|---|---|---|
| 十进制 → 二进制 | bin(n) 或 f"{n:b}" | bin(5) → 0b101 |
| 十进制 → 八进制 | oct(n) 或 f"{n:o}" | oct(15) → 0o17 |
| 十进制 → 十六进制 | hex(n) 或 f"{n:x}" | hex(255) → 0xff |
| 其他进制 → 十进制 | int(str, base) | int("FF", 16) → 255 |
| 任意进制互转 | 先转十进制,再转目标进制 | —— |

1万+

被折叠的 条评论
为什么被折叠?



