在 Python 中,字符串是最常用的数据类型之一,掌握字符串的各种操作对于日常编程至关重要。本文将详细介绍 Python 字符串的类型特性、编码转换、常用运算符及方法,帮助你全面掌握字符串处理技巧。

一、字符串的基本类型

Python 中的字符串属于 str 类型,以字符为单位进行处理;而经过编码后的字符串则属于 bytes 类型,以字节为单位处理。

# 查看字符串类型​
a = "hello world"​
print(type(a))  # <class 'str'>

二、字符串的编码与解码

字符串的编码(encode())和解码(decode())是处理文本数据的重要操作,尤其在网络传输和文件读写时经常用到。

1. 编码(str → bytes)

将字符串转换为字节序列,默认使用 UTF-8 编码,也可指定其他编码方式。

a = "hello world"
a1 = a.encode()  # 默认UTF-8编码
print(type(a1))  # <class 'bytes'># 指定编码方式为UTF-8
a3 = "字符串"
a4 = a3.encode("utf-8")
print(a4, type(a4))  # b'\xe5\xad\x97\xe7\xac\xa6\xe4\xb8\xb2' <class 'bytes'>

2. 解码(bytes → str)

将字节序列转换回字符串,需与编码时使用的方式一致。

a = 'hello world'
a1 = a.encode('utf-8')
print(type(a1))  # <class 'bytes'>a2 = a1.decode('utf-8')
print(type(a2)) #<class 'str'>

三、字符串常用运算符

1. 拼接(+)

将两个字符串合并为一个。

a = "字符串"
b = "拼接"
print(a + b)  # 字符串拼接

2. 重复输出(*)

重复指定次数的字符串。

b = "字符串"
print(b * 4)  # 字符串字符串字符串字符串

3. 成员检查(in /not in)

判断子串是否存在于字符串中。

c = "字符串哈哈哈"
print("哈" in c)      # True(存在)
print("ha" not in c)  # True(不存在)
print("字符" not in c) # False(存在)

4. 下标访问([])

通过下标获取单个字符,从左向右从 0 开始,从右向左从 -1 开始

d = "字符串哈哈哈"
print(d[5])   # 哈(正向索引:第6个字符)
print(d[-4])  # 串(反向索引:从右数第4个字符)

5. 切片([:])

截取字符串的一部分,遵循 **“包前不包后”** 原则(包含起始下标,不包含结束下标),支持指定步长。

e = "包前不包后原则"
# 基础切片
print(e[0:2])    # 包前(截取0-1下标)
print(e[1:])     # 前不包后原则(从1下标到结尾)
print(e[:5])     # 包前不包后(从开头到4下标)# 反向切片
print(e[-4:])    # 包后原则(从-4下标到结尾)# 步长控制(步长正负决定方向)
print(e[-3:-1:1]) # 后原(步长1,正向截取-3到-2)
print(e[-2::-1])  # 原后包不前包(步长-1,反向截取从-2到开头)

四、字符串常用方法

1. 查找子串位置

  • find(sub):返回子串首次出现的下标,不存在则返回 -1。
  • index(sub):功能与 find 相同,但子串不存在时会报错。
a = "abcdefg"
print(a.find("cd"))    # 2(子串"cd"从下标2开始)
print(a.find("bhd"))   # -1(子串不存在)
print(a.find("cde", 2)) # 2(从下标2开始查找)

2. 统计子串出现次数(count (sub))

返回子串在字符串中出现的次数,支持指定查找范围。

a = "abcdefgabc"
print(a.count("abc"))     # 2(全局查找)
print(a.count("abc", 4))  # 1(从下标4开始查找)

3. 判断前缀 / 后缀(startswith /endswith)

检查字符串是否以指定子串开头或结尾,支持指定范围。

a = "abcdefgabc"
print(a.startswith("ab"))        # True(以"ab"开头)
print(a.endswith("g"))           # False(不以"g"结尾)
print(a.startswith("ab", 3, 5))  # False(在3-5下标范围内不匹配)

4. 大小写转换

  • capitalize():首字母大写,其余小写。
  • lower() / upper():全小写 / 全大写。
  • title():每个单词首字母大写。
st = 'hello,python'
print(st.capitalize())  # Hello,python
print(st.upper())       # HELLO,PYTHON
print(st.title())       # Hello,Python

5. 替换子串(replace (old, new, count))

替换指定子串,count 可选(指定替换次数,默认全部替换)。

a = "old people old boy"
print(a.replace("old", "young"))    # young people young boy(全部替换)
print(a.replace("old", "young", 1)) # young people old boy(替换1次)

6. 分割字符串(split (sep, maxsplit))

按指定分隔符分割字符串,返回列表,maxsplit 可选(指定最大分割次数)。

st = 'hello,python'
print(st.split(','))    # ['hello', 'python'](按逗号分割)
print(st.split('o', 1)) # ['hell', ',python'](按'o'分割1次)

7. 移除空白 / 指定字符(strip 系列)

  • lstrip():移除左侧空白 / 指定字符。
  • rstrip():移除右侧空白 / 指定字符。
  • strip():移除两侧空白 / 指定字符。
st = '\t\nhello,python\t\n'
print(st.strip())  # hello,python(移除两侧空白)st = '!!hello,python!!!'
print(st.strip('!'))  # hello,python(移除两侧'!')

8. 居中、左对齐、右对齐

  • center(width, fillchar):将字符串居中,并用指定字符填充至指定宽度,默认填充空格。
  • ljust(width, fillchar):左对齐,用指定字符填充至指定宽度。
  • rjust(width, fillchar):右对齐,用指定字符填充至指定宽度。
s = "hello"
print(s.center(10, "*"))  # **hello***
print(s.ljust(10, "-"))   # hello-----
print(s.rjust(10, "="))   # =====hello

9. 判断字符串特性

  • isalpha():判断字符串是否只包含字母,且非空。
  • isdigit():判断字符串是否只包含数字,且非空。
  • isalnum():判断字符串是否只包含字母和数字,且非空。
  • isspace():判断字符串是否只包含空白字符,且非空。
print("abc".isalpha())   # True
print("123".isdigit())   # True
print("abc123".isalnum())# True
print("   \t\n".isspace())# True

10. 拼接列表为字符串

join(iterable):将可迭代对象中的元素以指定字符串为分隔符拼接成新字符串。

lst = ["hello", "python", "world"]
print("-".join(lst))  # hello-python-world
print("".join(lst))   # hellopythonworld

五、字符串格式化

1. % 格式化

通过 % 占位符格式化字符串,支持多种数据类型。

占位符说明
%c格式化字符及 ASCII 码
%s格式化字符串
%d格式化整数
%o格式化八进制数
%x/%X格式化十六进制数(小写 / 大写)
%f格式化浮点数
%e/%E科学计数法格式化浮点数
name = "Alice"
age = 25
pi = 3.1415926
print("hello, %s!" % name)          # hello, Alice!
print("年龄: %d" % age)             # 年龄: 25
print("两位小数: %.2f" % pi)        # 两位小数: 3.14
print("十六进制: %x" % 255)         # 十六进制: ff

2. f-string(Python 3.6+)

更简洁的格式化方式,支持直接嵌入变量和表达式。

name = "Alice"
subject = {'name': 'Alice', 'age': 25}
print(f'hello, {name}!')  # hello, Alice!
print(f'my friend is {subject["name"]}, age {subject["age"]}')  # my friend is Alice, age 25
print(f'1+1={1+1}')       # 1+1=2(支持表达式)

3. 三引号(多行字符串)

保留字符串的换行和缩进,适合定义多行文本。

para_str = """这是一个多行字符串的实例
多行字符串可以使用制表符
TAB ( \t )。
也可以使用换行符 [ \n ]。
"""
print(para_str)这是一个多行字符串的实例
多行字符串可以使用制表符
TAB ( 	 )。
也可以使用换行符 [ ]。

六、字符串的不可变性

Python 中的字符串是不可变的,即创建后不能修改其内容。当对字符串进行修改操作(如拼接、替换等)时,实际上是创建了一个新的字符串对象。

s = "hello"
s[0] = "H"  # 报错:'str' object does not support item assignment# 看似修改,实则创建新对象
s_new = s.replace("h", "H")
print(s,id(s))    #hello 1539940498544   
print(s_new,id(s_new)) #Hello 1539940498672

七、原始字符串

在字符串前加 r 或 R,表示原始字符串,字符串中的转义字符不会被处理,适用于路径表示等场景。

print("C:\\Users\\test")  # C:\Users\test
print(r"C:\Users\test")   # C:\Users\test(原始字符串,转义符不生效)

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

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【爬虫】逆向爬虫初体验之爬取音乐

寻找数据 打开F12中的网络页面&#xff0c;播放音乐后&#xff0c;筛选媒体&#xff0c;会发现当前这首歌曲音频链接地址&#xff0c;打开后&#xff0c;点击“标头”就能能看到请求URL 截取“.mp3”前面的一部分进行搜索&#xff0c;搜索出来了很多数据包&#xff0c;但都是…

CppCon 2018 学习:Fancy Pointers for Fun and Profit

“Fancy Pointers for Fun and Profit” 这个标题听起来像是在讨论**“高级指针用法”**&#xff0c;尤其是在C里&#xff0c;如何利用智能指针、定制指针类型&#xff0c;或者其他高级指针技巧来写更安全、更高效、更优雅的代码。 可能的理解和内容方向&#xff1a; 1. 什么是…

思辨场域丨数字信号技术重塑农林牧渔:从“靠天吃饭”到“靠数吃饭”

凌晨三点&#xff0c;山东莱芜的养猪户老李被手机震动惊醒。屏幕显示&#xff1a;3号猪舍&#xff0c;母猪即将分娩。他轻点屏幕启动远程监控&#xff0c;翻身继续入睡——而在几年前&#xff0c;这样的夜晚他只能在猪圈里守着。 清晨的茶园里&#xff0c;兴业县的茶农王大姐掏…

文心大模型及百度大模型内容安全平台齐获信通院大模型安全认证

近日&#xff0c;文心大模型与百度大模型内容安全平台——红线大模型双双荣获中国信息通信研究院泰尔认证中心颁发的“大规模预训练模型&#xff08;文本生成功能&#xff09;安全认证证书”&#xff0c;且二者的认证级别皆“增强级”的最高级别。 大规模预训练模型&#xff08…

香港服务器查询缓存禁用-性能优化关键技术解析

在香港服务器运维过程中&#xff0c;查询缓存禁用是提升数据库性能的关键操作。本文将深入解析禁用查询缓存的原理、操作步骤、适用场景及注意事项&#xff0c;帮助管理员优化MySQL服务器配置&#xff0c;解决高并发环境下的性能瓶颈问题。香港服务器查询缓存禁用-性能优化关键…

深度学习图像分类数据集—七种动物识别分类

该数据集为图像分类数据集&#xff0c;适用于ResNet、VGG等卷积神经网络&#xff0c;SENet、CBAM等注意力机制相关算法&#xff0c;Vision Transformer等Transformer相关算法。 数据集信息介绍&#xff1a;七种动物识别分类&#xff1a;[Chinese_Merganser, panda, Sika_Deer, …

ubuntu22桌面版中文输入法 fcitx5

不要去 ubuntu software 下载 fcitx5 快捷键用不了 直接 sudo apt install fcitx5 \ fcitx5-chinese-addons \ fcitx5-frontend-gtk4 fcitx5-frontend-gtk3 fcitx5-frontend-gtk2 \ fcitx5-frontend-qt5不要在fcitx5里面设置快捷键&#xff0c;有些应用可能无法生效 在设置里全…

推客系统小程序终极指南:从0到1构建自动裂变增长引擎,实现业绩10倍增长!

&#x1f4cc; 前言&#xff1a;为什么传统营销越来越难做&#xff1f;在流量红利消失的今天&#xff0c;企业普遍面临三大增长困境&#xff1a;获客成本飙升&#xff1a;电商、教育等行业单客成本突破500元&#xff0c;ROI持续走低用户粘性差&#xff1a;90%的活动用户只参与一…

【数据结构】排序算法:归并与堆

归并排序&#xff1a;分治策略的经典实现 算法原理 归并排序采用分治法策略&#xff0c;包含三个关键步骤&#xff1a; 分解&#xff1a;递归地将数组分成两半 解决&#xff1a;对子数组进行排序 合并&#xff1a;将两个有序子数组合并为一个有序数组 C语言实现 #includ…

机器学习-CatBoost

参考书籍&#xff1a;《机器学习-公式推导和代码实现》 官方文档提供的原生接口代码参考书籍的P187&#xff5e;P188 简介 全称是Categorical Boosting&#xff0c;由俄罗斯搜索引擎巨头Yandex于2017年提出。突出的优势是在于可以高效地处理数据中的类别特征 ML中对类别特征…

MPLS 多协议标签交换

前言&#xff1a; 多协议标签交换MPLS&#xff08;Multiprotocol Label Switching&#xff09;是一种IP&#xff08;Internet Protocol&#xff09;骨干网技术。MPLS在无连接的IP网络上引入面向连接的标签交换概念&#xff0c;将第三层路由技术和第二层交换技术相结合&#xf…

CTF Web PHP弱类型比较与布尔值判断

题目源码与注释 <?php show_source("index.php"); // 显示自身源码&#xff0c;方便分析 include("flag.php"); // 包含flag变量 $a $_GET[a]; // 获取GET参数a&#xff0c;抑制报错// 关键判断 if($a 0 and $a){echo $flag; …

AntV G6动态连线

完整代码如下 <!DOCTYPE html> <html lang="zh-CN"> <head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>AntV G6 动态连线</titl…

puppeteerSharp html转pdf

部属到linux 上报错&#xff1a; Failed to launch browser! /wwwroots/xxx/Chrome/Linux-138.0.7204.92/chrome-linux64/chrome: error while loading shared libraries: libatk-1.0.so.0: cannot open shared object file: No such file or directory 问题服务包缺少依赖&…

springBoot接口层时间参数JSON序列化问题,兼容处理

背景&#xff1a;解决前端传入时间参数格式不固定场景&#xff0c;避免接收参数报错时间格式不能序列化。一、概述在 Java 后端开发中&#xff0c;处理 JSON 数据时&#xff0c;经常需要对日期时间字段进行反序列化。Java 中常用的日期时间类型是 java.time.LocalDateTime&…

List、Set、Map三者之间的关系

1、数据结构与核心特性接口数据结构顺序性唯一性键值对null 元素List动态数组/链表有序&#xff08;插入顺序&#xff09;允许重复否允许多个 nullSet哈希表 / 红黑树无序&#xff08;HashSet&#xff09;有序&#xff08;LinkedHashSet/TreeSet&#xff09;不允许重复否仅 Has…

进程控制----进程终止

一、进程终止的核心场景正常终止&#xff08;代码完整运行完毕&#xff09;成功&#xff1a;进程执行到main函数结束或调用exit()&#xff0c;返回退出码 0&#xff08;约定为执行成功&#xff09;。失败&#xff1a;代码执行完毕但结果异常&#xff0c;返回非零退出码&#xf…

Milvus docker-compose 部署

文章目录 前言Milvus docker-compose 部署1. 下载2. 修改配置3. 启动4. 测试 前言 如果您觉得有用的话&#xff0c;记得给博主点个赞&#xff0c;评论&#xff0c;收藏一键三连啊&#xff0c;写作不易啊^ _ ^。   而且听说点赞的人每天的运气都不会太差&#xff0c;实在白嫖的…

EveryThing搜索具体路径下文件中的内容

1.打开EveryThing 2.点击搜索&#xff0c;选择高级搜索 3.选择需要搜索的文件的路径以及文件中需要包含的内容 4.之后就可以搜索到对应的目标文件

【算法】宽度优先遍历BFS

二叉树的宽搜 429、N叉树的层序遍历 题解 BFS核心思想 二叉树的宽搜一般都是借助队列来实现的&#xff0c;实现的原理为首先将根节点进行放入队列中&#xff0c;然后将根节点进行弹出的时候&#xff0c;将这个节点的孩子节点进行放入队列中&#xff0c;然后继续弹出队头的元…