Python字符串全面指南:从基础到高级

news2025/5/15 6:00:38

文章目录

  • Python字符串全面指南:从基础到高级
    • 1. 字符串基础概念
    • 2. 字符串的基本操作
      • 2.1 字符串拼接
      • 2.2 字符串索引和切片
    • 3. 字符串常用方法
      • 3.1 大小写转换
      • 3.2 字符串查找和替换
      • 3.3 字符串分割和连接
      • 3.4 字符串格式化
      • 3.5 字符串验证
    • 4. 字符串的不可变性
    • 5. 字符串编码与解码
    • 6. 字符串常用函数
    • 7. 字符串转义字符
    • 8. 字符串格式化高级技巧
      • 8.1 数字格式化
      • 8.2 对齐和填充
    • 9. 字符串实际应用案例
      • 9.1 密码强度检查
      • 9.2 文本处理
    • 10. 字符串方法速查表
    • 总结

Python字符串全面指南:从基础到高级

字符串是Python中最常用的数据类型之一,就像我们日常生活中的文字信息一样。本文将用通俗易懂的方式,结合大量代码示例和图表,带你全面掌握Python字符串的所有重要知识点。

1. 字符串基础概念

字符串就是一串字符的序列,可以包含字母、数字、符号等。在Python中,字符串是用单引号(')或双引号(")括起来的文本。

# 创建字符串的几种方式
name = 'Alice'
greeting = "Hello, World!"
# 如果在前面加个f相当于javascript中的模版字符串,字符串格式化中会讲
multiline = """这是一个
多行字符串"""

2. 字符串的基本操作

2.1 字符串拼接

操作描述示例结果
+连接字符串“Hello” + “World”“HelloWorld”
*重复字符串“Hi” * 3“HiHiHi”
# 字符串拼接示例
first_name = "张"
last_name = "三"
full_name = first_name + last_name  # "张三"

stars = "*" * 10  # "**********"

2.2 字符串索引和切片

字符串中的每个字符都有一个位置索引(从0开始):

 H  e  l  l  o  ,     W  o  r  l  d  !
0  1  2  3  4  5  6  7  8  9 10 11 12
text = "Hello, World!"

# 索引
print(text[0])   # 'H' (第一个字符)
print(text[-1])  # '!' (最后一个字符)

# 切片 [开始:结束:步长]
print(text[7:12])  # 'World' (7到11索引)
print(text[:5])    # 'Hello' (开始到4索引)
print(text[::2])   # 'Hlo ol!' (每隔一个字符)

3. 字符串常用方法

3.1 大小写转换

方法描述示例结果
lower()转小写“HELLO”.lower()“hello”
upper()转大写“hello”.upper()“HELLO”
capitalize()首字母大写“hello”.capitalize()“Hello”
title()每个单词首字母大写“hello world”.title()“Hello World”
swapcase()大小写互换“Hello”.swapcase()“hELLO”
# 大小写转换示例
message = "Python is FUN"
print(message.lower())   # "python is fun"
print(message.upper())   # "PYTHON IS FUN"
print(message.title())   # "Python Is Fun"

3.2 字符串查找和替换

方法描述示例结果
find()查找子串位置“hello”.find(“e”)1
index()类似find()但找不到时报错“hello”.index(“e”)1
count()统计子串出现次数“hello”.count(“l”)2
replace()替换子串“hello”.replace(“l”,“x”)“hexxo”
# 查找和替换示例
text = "Python编程很有趣,Python也很强大"

print(text.find("Python"))    # 0 (第一次出现的位置)
print(text.count("Python"))   # 2 (出现次数)
print(text.replace("Python", "Java"))  # 替换所有Python为Java

3.3 字符串分割和连接

方法描述示例结果
split()按分隔符分割字符串“a,b,c”.split(“,”)[‘a’,‘b’,‘c’]
join()连接字符串列表“,”.join([‘a’,‘b’,‘c’])“a,b,c”
partition()按分隔符分成三部分“hello”.partition(“e”)(‘h’,‘e’,‘llo’)
# 分割和连接示例
data = "苹果,香蕉,橙子"
fruits = data.split(",")  # ['苹果','香蕉','橙子']

new_data = "|".join(fruits)  # "苹果|香蕉|橙子"

3.4 字符串格式化

Python提供了多种字符串格式化方法:

# 1. %格式化 (旧式)
name = "李四"
age = 25
print("我叫%s,今年%d岁" % (name, age))

# 2. format()方法 (推荐)
print("我叫{},今年{}岁".format(name, age))
print("我叫{0},今年{1}岁,{0}很高兴认识你".format(name, age))

# 3. f-string (Python 3.6+ 最推荐)
print(f"我叫{name},今年{age}岁")
print(f"明年我就{age + 1}岁了")

3.5 字符串验证

方法描述示例结果
isdigit()是否全数字“123”.isdigit()True
isalpha()是否全字母“abc”.isalpha()True
isalnum()是否字母或数字“abc123”.isalnum()True
isspace()是否全空白字符" ".isspace()True
startswith()是否以某子串开头“hello”.startswith(“he”)True
endswith()是否以某子串结尾“hello”.endswith(“lo”)True
# 验证用户输入
user_input = input("请输入年龄: ")
if user_input.isdigit():
    age = int(user_input)
    print(f"你的年龄是{age}岁")
else:
    print("请输入有效的数字年龄")

4. 字符串的不可变性

字符串是不可变的,这意味着一旦创建就不能修改其中的字符:

text = "hello"
# text[0] = "H"  # 这会报错!

# 正确做法是创建新字符串
new_text = "H" + text[1:]  # "Hello"

5. 字符串编码与解码

Python 3中字符串默认使用Unicode编码:

# 编码:字符串 → 字节
text = "你好"
byte_data = text.encode("utf-8")  # b'\xe4\xbd\xa0\xe5\xa5\xbd'

# 解码:字节 → 字符串
new_text = byte_data.decode("utf-8")  # "你好"

6. 字符串常用函数

除了方法外,Python还有一些内置函数可以操作字符串:

函数描述示例结果
len()字符串长度len(“hello”)5
str()转换为字符串str(123)“123”
ord()获取字符的Unicode码ord(“A”)65
chr()根据Unicode码获取字符chr(65)“A”
# 常用函数示例
password = "abc123"
if len(password) < 6:
    print("密码太短,至少需要6个字符")

# ASCII码转换
print(ord("A"))  # 65
print(chr(97))   # 'a'

7. 字符串转义字符

转义字符以反斜杠\开头,表示特殊字符:

转义字符描述示例结果
\n换行print(“a\nb”)a
b
\t制表符print(“a\tb”)a b
\\反斜杠print(“\”)\
"双引号print(“”")"
单引号print(‘’')
# 转义字符示例
print("第一行\n第二行")
'''
第一行
第二行
'''
print("路径: C:\\Users\\Name") # 路径: C:\Users\Name
print('他说:\"你好\"') # 他说:"你好"

8. 字符串格式化高级技巧

8.1 数字格式化

# 保留小数位数
pi = 3.1415926
print(f"π的值是{pi:.2f}")  # "π的值是3.14"

# 千位分隔符
number = 1000000
print(f"{number:,}")  # "1,000,000"

# 百分比
score = 0.85
print(f"正确率:{score:.1%}")  # "正确率:85.0%"

8.2 对齐和填充

text = "Python"

# 左对齐,宽度10,填充*
print(f"{text:*<10}")  # "Python****"

# 右对齐,宽度10,填充空格
print(f"{text:>10}")   # "    Python"

# 居中对齐,宽度10,填充-
print(f"{text:-^10}")  # "--Python--"

9. 字符串实际应用案例

9.1 密码强度检查

password = input("设置密码: ")

has_upper = any(c.isupper() for c in password)
has_lower = any(c.islower() for c in password)
has_digit = any(c.isdigit() for c in password)
has_special = any(not c.isalnum() for c in password)

strength = 0
if len(password) >= 8: strength += 1
if has_upper: strength += 1
if has_lower: strength += 1
if has_digit: strength += 1
if has_special: strength += 1

print(f"密码强度(1-5): {strength}")

9.2 文本处理

# 统计文章中单词出现频率
text = """Python是一种解释型、面向对象、动态数据类型的高级程序设计语言。
Python由Guido van Rossum于1989年底发明,第一个公开发行版发行于1991年。"""

# 去除标点符号
import string
clean_text = text.translate(str.maketrans("", "", string.punctuation))

# 分割单词并统计
words = clean_text.lower().split()
word_count = {}
for word in words:
    word_count[word] = word_count.get(word, 0) + 1

print("单词频率:", word_count)

10. 字符串方法速查表

以下是Python字符串所有方法的快速参考:

方法描述示例
s.capitalize()首字母大写“hello”.capitalize() → “Hello”
s.casefold()更彻底的小写转换(适合比较)“ß”.casefold() → “ss”
s.center(width[, fillchar])居中填充“hi”.center(5,“-”) → “–hi–”
s.count(sub[, start[, end]])统计子串出现次数“hello”.count(“l”) → 2
s.encode([encoding[, errors]])编码为字节“你好”.encode(“utf-8”) → b’…’
s.endswith(suffix[, start[, end]])是否以某子串结尾“hello”.endswith(“lo”) → True
s.expandtabs([tabsize])替换制表符为空格“a\tb”.expandtabs(4) → “a b”
s.find(sub[, start[, end]])查找子串位置(找不到返回-1)“hello”.find(“e”) → 1
s.format(*args, **kwargs)格式化字符串“{}”.format(“hi”) → “hi”
s.format_map(mapping)类似format()但使用字典“{name}”.format_map({“name”:“Alice”}) → “Alice”
s.index(sub[, start[, end]])类似find()但找不到时报错“hello”.index(“e”) → 1
s.isalnum()是否字母或数字“abc123”.isalnum() → True
s.isalpha()是否全字母“abc”.isalpha() → True
s.isascii()是否ASCII字符“abc”.isascii() → True
s.isdecimal()是否十进制数字“123”.isdecimal() → True
s.isdigit()是否数字字符“¹”.isdigit() → True
s.isidentifier()是否有效标识符“var1”.isidentifier() → True
s.islower()是否全小写“hello”.islower() → True
s.isnumeric()是否数字字符“Ⅷ”.isnumeric() → True
s.isprintable()是否可打印字符“a”.isprintable() → True
s.isspace()是否全空白字符" ".isspace() → True
s.istitle()是否标题化(每个单词首字母大写)“Hello World”.istitle() → True
s.isupper()是否全大写“HELLO”.isupper() → True
s.join(iterable)连接字符串序列“,”.join([“a”,“b”]) → “a,b”
s.ljust(width[, fillchar])左对齐填充“hi”.ljust(5) → "hi "
s.lower()转换为小写“HELLO”.lower() → “hello”
s.lstrip([chars])去除左侧空白或指定字符" hi".lstrip() → “hi”
s.maketrans(x[, y[, z]])创建字符映射表str.maketrans(“ab”,“12”)
s.partition(sep)按分隔符分成三部分“hello”.partition(“e”) → (‘h’,‘e’,‘llo’)
s.replace(old, new[, count])替换子串“hello”.replace(“l”,“x”) → “hexxo”
s.rfind(sub[, start[, end]])从右查找子串位置“hello”.rfind(“l”) → 3
s.rindex(sub[, start[, end]])类似rfind()但找不到时报错“hello”.rindex(“l”) → 3
s.rjust(width[, fillchar])右对齐填充“hi”.rjust(5) → " hi"
s.rpartition(sep)从右分割成三部分“hello”.rpartition(“l”) → (‘hel’,‘l’,‘o’)
s.rsplit([sep[, maxsplit]])从右分割字符串“a b c”.rsplit(maxsplit=1) → [‘a b’,‘c’]
s.rstrip([chars])去除右侧空白或指定字符"hi ".rstrip() → “hi”
s.split([sep[, maxsplit]])分割字符串“a,b,c”.split(“,”) → [‘a’,‘b’,‘c’]
s.splitlines([keepends])按行分割“a\nb”.splitlines() → [‘a’,‘b’]
s.startswith(prefix[, start[, end]])是否以某子串开头“hello”.startswith(“he”) → True
s.strip([chars])去除两侧空白或指定字符" hi ".strip() → “hi”
s.swapcase()大小写互换“Hello”.swapcase() → “hELLO”
s.title()每个单词首字母大写“hello world”.title() → “Hello World”
s.translate(table)按映射表转换字符“abc”.translate({97: “x”}) → “xbc”
s.upper()转换为大写“hello”.upper() → “HELLO”
s.zfill(width)左侧填充0“42”.zfill(5) → “00042”

总结

Python字符串要点回顾:

  1. 创建字符串:使用单引号、双引号或三引号
  2. 基本操作:拼接(+)、重复(*)、索引和切片
  3. 常用方法:大小写转换、查找替换、分割连接等
  4. 格式化:f-string是最推荐的现代格式化方法
  5. 不可变性:字符串创建后不能修改,只能创建新字符串
  6. 编码解码:处理不同字符编码时需要转换
  7. 实用技巧:转义字符、数字格式化、对齐填充等

掌握这些字符串知识,你就能高效地处理各种文本数据和字符串操作了!字符串是编程中最基础也是最重要的数据类型之一,值得花时间深入学习。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2375850.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

编译openssl源码

openssl版本 1.1.1c windows 安装环境 perl 先安装perl&#xff0c;生成makefile需要 https://strawberryperl.com/releases.html nasm nasm 也是生成makefile需要 https://www.nasm.us/ 安装完perl输入一下nasm&#xff0c;看看能不能找到&#xff0c;找不到的话需要配…

OpenCV实现数字水印的相关函数和示例代码

OpenCV计算机视觉开发实践&#xff1a;基于Qt C - 商品搜索 - 京东 实现数字水印的相关函数 用OpenCV来实现数字水印功能&#xff0c;需要使用一些位操作函数&#xff0c;我们需要先了解一下这些函数。 1. bitwise_and函数 bitwise_and函数是OpenCV中的位运算函数之一&…

坐席业绩数据分析

豆包提示词&#xff1a; 使用papaparse.js&#xff0c;chart.js&#xff0c;tailwindcss和font-awesome&#xff0c;生成一个可以交互的简洁且可以运行的HTML代码&#xff0c;不要输出无关内容。 具体要求如下&#xff1a; 1、按坐席姓名输出业绩折线图。 2、系统导航区域&…

怎样将MM模块常用报表设置为ALV默认格式(MB52、MB5B、ME2M、ME1M等)

【SAP系统研究】 对SAP系统中的报表,最方便的格式就是ALV了,可排序、可导出,非常友好。 但有些常见报表却不是默认ALV界面的,譬如MB52: 是不是有点别扭?但其实是可以后台配置进行调整的。 现将一些常用报表修改为默认ALV的方法进行总结,便于大家使用。 一、MB52、MB5…

Arduino使用红外收发模块

目录 Arduino UNO连接红外发射模块&#xff1a; Arduino D1连接红外接收模块&#xff1a; 有一个Arduini UNO板子和一个Arduino D1板子&#xff0c;我想通过红外发射模块和红外接收模块让他们进行通信。 先看结果&#xff1a; Arduino UNO连接红外发射模块&#xff1a; 发射模…

机器学习 Day16 聚类算法 ,数据降维

聚类算法 1.简介 1.1 聚类概念 无监督学习&#xff1a;聚类是一种无监督学习算法&#xff0c;不需要预先标记的训练数据 相似性分组&#xff1a;根据样本之间的相似性自动将样本归到不同类别 相似度度量&#xff1a;常用欧式距离作为相似度计算方法 1.2 聚类vs分类 聚类&…

软件测试——面试八股文(入门篇)

今天给大家分享软件测试面试题入门篇&#xff0c;看看大家能答对几题 一、 请你说一说测试用例的边界 参考回答&#xff1a; 边界值分析法就是对输入或输出的边界值进行测试的一种黑盒测试方法。通常边界值分析法是作为对等价类划分法的补充&#xff0c;这种情况下&#xff…

Yolov8的详解与实战-深度学习目标检测

Yolov8的详解与实战- 文章目录 摘要 模型详解 C2F模块 Loss head部分 模型实战 训练COCO数据集 下载数据集 COCO转yolo格式数据集&#xff08;适用V4&#xff0c;V5&#xff0c;V6&#xff0c;V7&#xff0c;V8&#xff09; 配置yolov8环境 训练 测试 训练自定义数据集 Labelme…

Python(1) 做一个随机数的游戏

有关变量的&#xff0c;其实就是 可以直接打印对应变量。 并且最后倒数第二行就是可以让两个数进行交换。 Py快捷键“ALTP 就是显示上一句的代码。 —————————————————————————————— 字符串 用 双引号或者单引号 。 然后 保证成双出现即可 要是…

【Bootstrap V4系列】学习入门教程之 组件-导航条(Navbar)

Bootstrap V4系列 学习入门教程之 组件-导航条&#xff08;Navbar&#xff09; 导航条&#xff08;Navbar&#xff09;一、How it works二、Supported content 支持的内容2.1 Brand 品牌2.2 Nav 导航2.3 Forms 表格 三、Color schemes 配色方案四、Containers 容器五、Placemen…

[Java实战]Spring Security 添加验证码(二十三)

[Java实战]Spring Security 添加验证码&#xff08;二十三&#xff09; 在现代的 Web 应用中&#xff0c;验证码是防止恶意攻击&#xff08;如暴力破解、自动注册等&#xff09;的重要手段之一。Spring Security 是一个功能强大的安全框架&#xff0c;提供了用户认证、授权等功…

万文c++继承

1、继承的概念与定义 1.1继承的概念 继承&#xff1a;是c代码复用的手段&#xff0c;允许在原有的基础上扩展&#xff0c;在此之前都是函数层次的复用&#xff0c;继承是类设计层次的复用。 下面有两个类Student和Teacher都有姓名/地址/电话/年龄等成员变量。都有identity身…

Linux grep -r 查找依赖包是否存在依赖类 Class

方法一&#xff1a;通过 Linux &#xff0c;grep -r ClassPath 命令 grep -f org.apache.kafka.connect.source.SourceRecord在 jar 包所在 lib 或者 lib/plugins 目录下执行&#xff0c;grep -r&#xff0c; flink-sql-connector-sqlserver-cdc-3.3.0.jar 中此 kafka Source…

41:像素坐标与实际坐标转化

采用上面的算子 将像素坐标点转换为实际坐标 image_points_to_world_plane(CamParam, Worldpose, Row, Column, m, X, Y) 第一个参数&#xff1a;标定得到的内参--根据标定助手得到的 第二个参数&#xff1a;标定得到的外参--根据标定助手得到的 第三个参数&#xff1a;计算…

大某麦演唱会门票如何自动抢

引言 仅供学习研究&#xff0c;欢迎交流 抢票难&#xff0c;难于上青天&#xff01;无论是演唱会、话剧还是体育赛事&#xff0c;大麦网的票总是秒光。大麦网是国内知名的票务平台&#xff0c;热门演出票往往一票难求。手动抢票不仅耗时&#xff0c;还容易错过机会。作为一名…

LVS负载均衡群集和keepalive

目录 一. 集群概述 1.1 集群的定义 1.2 集群的分类 1. 高可用集群 HA 2. 高性能运输群集 HPC 3.负载均衡群集 LB 4. 分布式存储集群 二. LVS概述 2.1 LVS的定义 2.2 LVS的工作原理 2.3 LVS 的三种工作模式 2.4 LVS 三种工作模式的对比 2.5 LVS 调度算法 1. 静态…

Apache Pulsar 消息、流、存储的融合

Apache Pulsar 消息、流、存储的融合 消息队列在大层面有两种不同类型的应用&#xff0c;一种是在线系统的message queue&#xff0c;一种是流计算&#xff0c;data pipeline的streaming高throughout&#xff0c;一致性较低&#xff0c;延迟较差的过程。 存算分离 扩容和缩容快…

最优化方法Python计算:有约束优化应用——线性可分问题支持向量机

设问题的数据样本点 ( x i , y i ) (\boldsymbol{x}_i,y_i) (xi​,yi​)&#xff0c; x i ∈ R n \boldsymbol{x}_i\in\text{R}^n xi​∈Rn&#xff0c; y i 1 y_i\pm1 yi​1&#xff0c; i 1 , 2 , ⋯ , m i1,2,\cdots,m i1,2,⋯,m。由于标签数据 y i ∈ { − 1 , 1 } y_i\…

SpringBoot学习(上) , SpringBoot项目的创建(IDEA2024版本)

目录 1. SpringBoot介绍 SpringBoot特点 2. SpringBoot入门 2.1 创建SpringBoot项目 Spring Initialize 第一步: 选择创建项目 第二步: 选择起步依赖 第三步: 查看启动类 2.2 springboot父项目 2.3 测试案例 2.3.1 数据库 2.3.2 生成代码 1. SpringBoot介绍 Spring B…

【Redis 进阶】哨兵模式

思维导图&#xff1a; 一、哨兵模式概述 &#xff08;一&#xff09;传统主从复制模式的局限性 在传统的Redis主从复制架构中&#xff0c;若主节点发生故障&#xff0c;运维人员需手动执行故障转移操作&#xff0c;将一个从节点提升为新主节点&#xff0c;并逐一通知所有客户…