当前位置: 首页 > article >正文

萌新学 Python 之字符串及字符串相关函数

字符串:单引号、双引号、三个单引号、三个双引号

字符串属于不可变的数据类型,一旦被定义,内存地址不变

name = '张三'          # 字符串赋值给name后,内存地址存储张三,地址不变
username = '张三'      # 张三去内存中找,username指向内存地址与name的地址一致
print(name is username)       # Truename = '李四'          # 修改name的值为李四,二者地址不同
print(name is username)       # False

每个字符串在 python 中,都有两个索引值(下标)

1.从左到右:索引值从 0 开始,依次递增,   0    1    2   3   4   5    6   7   8   9

2.从右到左:索引值从 -1 开始,依次递减,-10  -9  -8  -7  -6  -5  -4  -3  -2  -1

字符串的运算:

+  连接字符

*  连续输出多次字符串

str1 = 'a'
str2 = 'b'
print(str1 * 2 + str2 * 2)     # aabb

len(字符串)  获取字符串长度

str1 = 'aabb'
print(len(str1))   # 4

字符串的索引:通过在字符串后面添加一对中括号和索引值,查找指定位置的字符

格式:字符串[索引值]

#       01234
str1 = 'a bcd'
#      -5...-1
print(str1[0], str1[2], str1[-1])     # a b d

字符串的切片:截取一段字符

格式:字符串[起始位置: 结束位置: 步长]

切片至少有一个冒号,默认从左到右,截取的范围左闭右开(左边包含,右边不包含)

步长默认为 1,起始默认为 0,结束默认 len

步长为负数,从右边开始截取

#       012345678910
str1 = 'I love you.'
# 字符串切片至少一个冒号,默认步长为1
print(str1[:], str1[::])            # I love you. I love you.
# 左闭右开,包含2,不包含8,从下标2开始,到下标7结束
print(str1[2:8])                    # love y
# 步长正数,每隔1位2位3位截取一个
print(str1[::1], str1[::2], str1[::3])     # I love you. Ilv o. Io u
# 步长负数,从右截取
print(str1[::-1])                  # .uoy evol I 
print(str1[::-2], str1[::-3])      # .o vlI .yv

字符串相关函数:

find:查找指定字符出现的索引值,返回索引值

格式:'字符串'.find('子字符', '起始位置', '结束位置')

#       012345678910
str1 = 'I love you.'
# '字符串'.find('子字符', '起始位置', '结束位置')
print(str1.find('o'), str1.find('e', 2, 9))     # 3 5

点进 find 查看详细信息

sub 子字符、start 起始位置、end 结束位置

如果范围内没有查找的内容,返回 -1

    def find(self, sub, start=None, end=None): # real signature unknown; restored from __doc__"""S.find(sub[, start[, end]]) -> intReturn the lowest index in S where substring sub is found,such that sub is contained within S[start:end].  Optionalarguments start and end are interpreted as in slice notation.Return -1 on failure."""return 0

同理,rfind 从右边查找

find 与 index 的区别:

find 找不到字符会返回 -1,index 找不到字符报错

split:指定分隔符分隔原字符串,返回列表 [ ],默认分隔符为空格

格式:'字符串'.split('分隔符', 最大分隔的次数)

str1 = 'I love you.'
# '字符串'.split('分隔符',最大分隔次数)    返回列表[]
print(str1.split())           # ['I', 'love', 'you.']
print(str1.split(' ', 1))     # ['I', 'love you.']     分隔一次
print(str1.split('o'))        # ['I l', 've y', 'u.']  以o为分隔符

可以看到 split 方法中,sep 表示分隔符,maxsplit 表示最大分隔的次数

splitline 按换行符进行分隔:\n   \r   \n\r

expandtabs(空格数)   按制表符 \t 进行分隔,默认 8 个空格

# expandtabs(空格数)  按制表符 \t 进行分隔,默认8个空格
print('1\t2\t3\t4'.expandtabs())        # 1       2       3       4
print('1\t2\t3\t4'.expandtabs(4))       # 1   2   3   4

rpartition 从右边开始分隔,分隔为 3 个元素的元组(分隔符之前的部分,分隔符,分隔符之后的部分)可用于文件

# rpartition 从右边开始分隔,(分隔符之前的部分,分隔符,分隔符之后的部分)
print('www.baidu.com'.rpartition('.'))       # ('www.baidu', '.', 'com')
print('www.baidu.com'.rpartition(','))       # ('', '', 'www.baidu.com')

replace 替换字符,返回替换后的字符串

格式:字符串.replace('旧字符', '新字符', '替换次数')

# 字符串.replace('旧字符', '新字符', '替换次数')
str1 = 'www.baidu.com'
str2 = 'aaaaaaaaaaaaaa'
print(str1.replace('.', '-'))       # www-baidu-com
print(str2.replace('a', 'b', 2))    # bbaaaaaaaaaaaa

strip:去除字符串两边指定的字符,默认去除空格

格式:字符串.strip('指定字符')

如果指定的字符串为多个字符,逐个去除,直到出现不同的停止

'''  strip 去除字符串两边指定的字符,默认去除空格格式:字符串.strip('指定字符') '''
str1 = '    www.baidu.com   '
print(str1.strip())           # www.baidu.com
print(str1.strip('w .bm'))    # aidu.co

(这里尝试了下去除中间的任意字符,但没法去除,只有字符串两边的才行,

而且原字符串有两个点只去除了前面,因为 w 和空格都去除了,前面的点成了字符串的头,

后面是完整的字符串 baidu.com 所以无法再去除点)

同理,rstrip 表示从右边去除,lstrip 表示从左边去除

print(str1.rstrip())          #     www.baidu.com
print(str1.lstrip())          # www.baidu.com   

join:指定连接符连接字符串的字符

格式:'连接符'.join('可迭代对象')

''' join 指定连接符连接字符串的字符格式:'连接符'.join('可迭代对象') '''
print('-'.join('1234'))             # 1-2-3-4
print('abcd'.join('1234'))          # 1abcd2abcd3abcd4
print('+'.join(['a', 'b', 'c']))    # a+b+c

元组 () 和列表 [ ] 稳定,集合 { } 不稳定,会将字符串重新排序

encode 字符串编码decode 字符串解码

编码和解码的字符集必须相同

str1 = 'a咩c'
# encode 编码
print(str1.encode(encoding='utf-8'))  # b'a\xe5\x92\xa9c'  b开头表示字节,utf-8汉字3个字节 
print(str1.encode(encoding='gbk'))    # b'a\xdf\xe3c'      b开头表示字节,gbk汉字2个字节
# decode 解码
print(b'a\xe5\x92\xa9c'.decode(encoding='utf-8'))      # a咩c

count 统计子字符在原字符串中出现的次数,不存在则返回 0

格式:字符串.count('子字符', 起始位置, 结束位置)

''' count 统计子字符在原字符串中出现的次数格式:字符串.count('子字符', 起始位置, 结束位置) '''
#       0123456789
str1 = 'abbcccdddd'
print(str1.count('d', 5))      # 4  从下标5开始

点进 count 查看详细信息

    def count(self, sub, start=None, end=None): # real signature unknown; restored from __doc__"""S.count(sub[, start[, end]]) -> intReturn the number of non-overlapping occurrences of substring sub instring S[start:end].  Optional arguments start and end areinterpreted as in slice notation."""return 0

可以看到 count 函数中,sub 表示子字符,start 和 end 表示起始和结束位置

字符串大小写转换:

常用的有 upper(全部转大写)、lower(全部转小写)、title(单词首字母大写)、swapcase(大小写互换)、

capitalize(字符首字母大写)、casefold(转小写,会对特殊语言进行标准化处理,国际化)

str1 = 'wWW.bAidU.COm'
# upper 转大写
print(str1.upper())            # WWW.BAIDU.COM
# lower 转小写
print(str1.lower())            # www.baidu.com
# title 单词首字母大写
print(str1.title())            # Www.Baidu.Com
# swapcase 大小写互换
print(str1.swapcase())         # Www.BaIDu.coM
# capitalize 字符首字母大写
print(str1.capitalize())       # Www.baidu.com
# casefold 转小写,国际化
print(str1.casefold())         # www.baidu.com

字符串对齐方式:

center 居中、ljust 左对齐、rjust 右对齐、zfill 零补位

以 center 为例,width 表示字符串的总宽度,fillchar 表示填充字符

其他原理一致

str1 = 'a b c'
# center 居中
print(str1.center(10, '*'))      # **a b c***
# ljust 左对齐
print(str1.ljust(10, '.'))       # a b c.....
# rjust 右对齐
print(str1.rjust(10, '+'))       # +++++a b c
# zfill 零补位
print(str1.zfill(10))            # 00000a b c

is 开头的函数通常是用来做一些判断:

比如 isdecimal(是否是数字)、isdigit(是否是数字,包含字节 b 开头)、isnumeric(是否是数字,包含汉字和数字)、

isalpha(是否是字母)、isupper(是否大写)、islower(是否小写)、isalnum(是否字母和数字)、

isascil(是否是 ascil 码)、isidentifier(是否是标识符)等

format 字符串格式化输出:

格式:字符串.format(*args, **kwargs)

*args 和 **kwargs 都是 python 中的可变参数

*args 允许函数接受任意数量的位置参数,这些参数会以元组的形式传入函数内部

**kwargs 允许函数接受任意数量的关键字参数,这些参数会以字典的形式传入函数内部

''' format 字符串格式化输出格式:字符串.format(*args, **kwargs) '''
# 按位置传参,顺序取值
print('{},{}'.format('abc', '123'))         # abc,123
# 按关键字传参,与顺序无关
print('{k},{v}'.format(v='abc', k=123))     # 123,abc

import string 模块:

使用方法:直接 string 后面加点

# Some strings for ctype-style character classification
whitespace = ' \t\n\r\v\f'
ascii_lowercase = 'abcdefghijklmnopqrstuvwxyz'
ascii_uppercase = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
ascii_letters = ascii_lowercase + ascii_uppercase
digits = '0123456789'
hexdigits = digits + 'abcdef' + 'ABCDEF'
octdigits = '01234567'
punctuation = r"""!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~"""
printable = digits + ascii_letters + punctuation + whitespace

相关文章:

萌新学 Python 之字符串及字符串相关函数

字符串&#xff1a;单引号、双引号、三个单引号、三个双引号 字符串属于不可变的数据类型&#xff0c;一旦被定义&#xff0c;内存地址不变 name 张三 # 字符串赋值给name后&#xff0c;内存地址存储张三&#xff0c;地址不变 username 张三 # 张三去内存中找…...

如何改善RK3588基于MPP的H265传输码率

1、降低帧率 由原来的30fps修改为25fps&#xff0c;具体修改如下&#xff1a; H265Level level H264Level::L_1080P_30FPS;修改为 H265Level level H264Level::L_1080P_25FPS; 同时修改在MppInit函数中修改如下内容&#xff1a; uint32_t fps 30;修改为uint32_t fps 2…...

系统思考—自我超越

“人们往往认为是个人的能力限制了他们&#xff0c;但事实上&#xff0c;是组织的结构和惯性思维限制了他们的潜力。”—彼得圣吉 最近和一家行业隐形冠军交流&#xff0c;他们已经是领域第一&#xff0c;老板却依然要求&#xff1a;核心团队都要自我超越&#xff0c;攻坚克难…...

redis高级数据结构Stream

文章目录 背景stream概述消息 ID消息内容常见操作独立消费创建消费组消费 Stream弊端Stream 消息太多怎么办?消息如果忘记 ACK 会怎样?PEL 如何避免消息丢失?分区 Partition Stream 的高可用总结 背景 为了解决list作为消息队列是无法支持消息多播问题&#xff0c;Redis5.0…...

day44 QT核心机制

头文件&#xff1a; #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include<QLabel> //标签类头文件 #include<QPushButton> //按钮类头文件 #include<QLineEdit> //行编辑器类头文件QT_BEGIN_NAMESPACE namespace Ui { class Widget; } …...

打家劫舍3

今天和打家讲一下打家劫舍3 题目&#xff1a; 题目链接&#xff1a;337. 打家劫舍 III - 力扣&#xff08;LeetCode&#xff09; 小偷又发现了一个新的可行窃的地区。这个地区只有一个入口&#xff0c;我们称之为root。 除了 root 之外&#xff0c;每栋房子有且只有一个“父“…...

webpack配置之---上下文

context context 是 Webpack 配置中的一个重要属性&#xff0c;它主要用于确定模块解析时的基础目录。可以理解为是 Webpack 在解析模块时&#xff0c;基于哪个目录作为根路径来查找模块。context 的默认值是 process.cwd()&#xff0c;即当前执行 Webpack 命令时的工作目录。…...

Spring Boot: 使用 @Transactional 和 TransactionSynchronization 在事务提交后发送消息到 MQ

Spring Boot: 使用 Transactional 和 TransactionSynchronization 在事务提交后发送消息到 MQ 在微服务架构中&#xff0c;确保消息的可靠性和一致性非常重要&#xff0c;尤其是在涉及到分布式事务的场景中。本文将演示如何使用 Spring Boot 的事务机制和 TransactionSynchron…...

2024中国行政区划多边形矢量数据(含有十段线)仅供学习

中国标准行政区划数据GS&#xff08;2024&#xff09;0650号&#xff0c;包括&#xff1a; 分省市县 省内分市 省内分县 南海十段线与岛屿区域 全国市级行政区划 通过网盘分享的文件&#xff1a;中国标准行政区划数据GS&#xff08;2024&#xff09;0650号.rar等4个文件 链接…...

给底部导航栏添加图形

文章目录 1. 概念介绍2. 修改方法2.1 修改属性2.2 包裹容器2.3 剪裁形状3. 代码与效果3.1 示例代码3.2 运行效果4. 内容总结我们在上一章回中介绍了"NavigationBar组件"相关的内容,本章回中将介绍如何修改NavigationBar组件的形状.闲话休提,让我们一起Talk Flutter…...

DeepSeek-R1 智能知识库系统使用指南

DeepSeek-R1 智能知识库系统使用指南 第一部分 基础操作教程 1.1 系统初始化 // 示例命令 > /initialize --configenterprise_knowledge --languagezh-CN [系统响应] 已加载企业知识图谱&#xff08;含12万实体/35万关系&#xff09;NLP引擎切换为中文混合语义模型1.2 基…...

#渗透测试#批量漏洞挖掘#WookTeam searchinfo SQL注入漏洞

免责声明 本教程仅为合法的教学目的而准备,严禁用于任何形式的违法犯罪活动及其他商业行为,在使用本教程前,您应确保该行为符合当地的法律法规,继续阅读即表示您需自行承担所有操作的后果,如有异议,请立即停止本文章读。 目录 一、漏洞概述 二、漏洞成因分析 1. 代码…...

leetcode 做题思路快查

128. 最长连续序列 arr 1 2 3 4 100 200; A. for将元素加入hash_set; B.对于每个x, x-1不在hash_set则x是bengin节点&#xff0c;begin_vev 1 , 100 , 200; C. 对于bengin_vec中&#xff0c;如果x在hash_set&#xff0c;则序列长度 151. 反转字符串中的单词151. 反转字符串…...

HarmonyOS Next 方舟字节码文件格式介绍

在开发中&#xff0c;可读的编程语言要编译成二进制的字节码格式才能被机器识别。在HarmonyOS Next开发中&#xff0c;arkts会编译成方舟字节码。方舟字节码长什么样呢&#xff1f;我们以一个demo编译出的abc文件&#xff1a; 二进制就是长这样&#xff0c;怎么去理解呢&…...

iOS主要知识点梳理回顾-2-多线程

iOS的多线程主要有三种方式&#xff0c;NSThread、GCD&#xff08;Grand Central Dispatch&#xff09;NSOperationQueue 开始&#xff0c;在iOS2发布的时候&#xff0c;苹果同步推出了NSthread和NSOperation。其中NSthread比较简单&#xff0c;仅提供了创建队列、开始、取消、…...

WPS如何接入DeepSeek(通过JS宏调用)

WPS如何接入DeepSeek 一、文本扩写二、校对三、翻译 本文介绍如何通过 WPS JS宏调用 DeepSeek 大模型&#xff0c;实现自动化文本扩写、校对和翻译等功能。 一、文本扩写 1、随便打开一个word文档&#xff0c;点击工具栏“工具”。 2、点击“开发工具”。 3、点击“查看代码”…...

【课程设计参考】迷宫小游戏 :基于 Python+Pygame+AI算法

一、内容 实现走迷宫 &#xff08;1&#xff09;游戏界面显示&#xff1a;迷宫地图、上下左右移动的特效。 &#xff08;2&#xff09;动作选择&#xff1a;上下左右键对应于上下左右的移动功能&#xff0c;遇到障碍的处理。 &#xff08;3&#xff09;得分统计功能&#xff…...

sa8295 qnx ais_camare如何支持一个摄像头两路vc输出?

当一个摄像头有两个vc输出的时候&#xff0c;如何更改驱动配置呢&#xff1f; 当一个摄像头可以输出两路vc&#xff0c;并且格式不同。根据每一路的vc图像数据格式修改串行器中maxxxx_mode_t里面的数组mode参数&#xff08;以下仅为例子&#xff09; struct maxxxx_mode_t ma…...

通过类加载和初始化的一些题目理解Java类加载过程

通过题目重点理解&#xff1a;Class加载流程和运行时区域 目录 子类和父类static变量父子类加载顺序2class.forName初始化 子类和父类static变量 class Parent {static int a 1;static int b 2;static int c;static {c 3;System.out.println("parent static block&quo…...

Coze(扣子)+ Deepseek:多Agents智能体协作开发新范式

前言 在当今数字化浪潮中&#xff0c;人工智能&#xff08;AI&#xff09;技术的迅猛发展正深刻改变着我们的生活和工作方式。从智能语音助手到自动化流程机器人&#xff0c;AI 的应用无处不在&#xff0c;为我们提供了更加便捷、高效的服务。然而&#xff0c;对于非专业人士来…...

浅析Ruby类污染及其在Sinatra框架下的利用

和JavaScript中的原型链污染类似&#xff0c;Ruby中也存在类似的概念——类污染&#xff0c;两者都是对象进行不安全的递归合并导致的。 网上也没有相关的分析文章&#xff0c;只有下面这篇文章应该是第一次谈到这个问题 Class Pollution in Ruby: A Deep Dive into Exploiti…...

【NLP251】Transformer API调用

1. nn.Transformer nn.Transformer封装了Transformer中的包含编码器&#xff08;Encoder&#xff09;和解码器&#xff08;Decoder&#xff09;。如下图所示&#xff0c;它对Encoder和Decoder两部分的包装&#xff0c;它并没有实现输入中的Embedding和Positional Encoding和最…...

ubuntu下迁移docker文件夹

在 Ubuntu 系统中迁移 Docker 文件夹&#xff08;如 Docker 数据存储文件夹 /var/lib/docker&#xff09;到另一个磁盘或目录&#xff0c;通常是为了释放系统盘空间。以下是迁移过程的详细步骤&#xff1a; 1. 停止 Docker 服务 在进行迁移之前&#xff0c;必须停止 Docker 服…...

为AI聊天工具添加一个知识系统 之93 详细设计之34 Derivation 之 8 实现和平台

本文要点 要点 插入话题&#xff1a;实现 “实现”作为一个普通名词&#xff08;一般术语&#xff09;应该遵循第一性第二性第三性原则。其 第一性第二性第三性 分别是&#xff1a;完整性/鲁棒性/健壮性 &#xff0c;三者 分别注重 性能/功能/能力。即 首先是 实现完整性的性…...

idea 如何使用deepseek 保姆级教程

1.安装idea插件codegpt 2.注册deepseek并生成apikey deepseek 开发平台&#xff1a; DeepSeek​​​​​​​ 3.在idea进行codegpt配置 打开idea的File->Settings->Tools->CodeGPT->Providers->Custom OpenAI Chat Completions的URL填写 https://api.deepseek…...

python实现情绪识别模块,并将模块封装成可执行文件

目录&#xff1a; 1.源码&#xff1a;2.情绪识别模型运行流程&#xff1a;3.模型封装需要注意的地方&#xff1a;4.未解决问题&#xff1a; 1.源码&#xff1a; https://gitcode.com/xyint/deep_learning.git 2.情绪识别模型运行流程&#xff1a; 需要获取用户摄像头权限&…...

AH比价格策略源代码

用python 获取在A股和香港上市的公司和在A股和香港上市的公司股票代码和名称并且选出港股和A股涨幅相差比较大的股票 import akshare as akdef get_ah_stocks():# 获取A股股票列表a_stock_list ak.stock_zh_a_spot_em()print(a_stock_list)a_stock_list a_stock_list[[&quo…...

trimesh 加载obj mesh处理

目录 trimesh 加载obj trimesh入门 主要功能 安装 基本用法 1. 加载和保存 3D 模型 2. 几何操作 3. 网格分析 4. 可视化 5. 布尔运算 6. 碰撞检测 trimesh 加载obj template_mesh trimesh.load_mesh(r"E:\project\3d\lilpotat--pytorch3d\pixie_data\smplx_te…...

常见数据结构的C语言定义---《数据结构C语言版》

文章目录 1. 静态分配的顺序表2. 动态分配的顺序表3. 单 链 表4. 双 链 表5. 静态链表6. 顺序栈7. 链栈8. 顺序存储的队列9. 链式存储的队列10. 链式存储的二叉树11. 线索二叉树12. 树的双亲表示法13. 树的孩子兄弟表示法12. 图的邻接矩阵法13. 图的邻接表法1-13集合版本 #defi…...

C++小知识记录,不定时更新

1. 普通函数不能在头文件中定义&#xff1a; 当多个.cpp调用时&#xff0c;在编译链接时会在.o文件中重复定义报错 2. 为什么内联函数可以在头文件中定义&#xff1a;适用短小函数 当.cpp调用时&#xff0c;编译器只会在当前文件展开该函数&#xff0c;相当于每个.cpp会重新定…...