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

news2025/3/15 23:27:25

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

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

name = '张三'          # 字符串赋值给name后,内存地址存储张三,地址不变
username = '张三'      # 张三去内存中找,username指向内存地址与name的地址一致
print(name is username)       # True

name = '李四'          # 修改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]]) -> int
        
        Return the lowest index in S where substring sub is found,
        such that sub is contained within S[start:end].  Optional
        arguments 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]]) -> int
        
        Return the number of non-overlapping occurrences of substring sub in
        string S[start:end].  Optional arguments start and end are
        interpreted 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

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

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

相关文章

系统思考—自我超越

“人们往往认为是个人的能力限制了他们&#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;每栋房子有且只有一个“父“…

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…

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

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

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

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

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和最…

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…

群晖安装Gitea

安装Docker Docker运行Gitea 上传gitea包&#xff0c;下载地址&#xff1a;https://download.csdn.net/download/hmxm6/90360455 打开docker 点击印象&#xff0c;点击新增&#xff0c;从文件添加 点击启动 可根据情况&#xff0c;进行高级设置&#xff0c;没有就下一步 点击应…

LabVIEW商业软件开发

在商业软件开发和仪器自动测试领域&#xff0c;LabVIEW以其图形化编程方式、高效的数据采集能力和强大的硬件集成优势&#xff0c;成为众多工程项目的核心开发工具。然而&#xff0c;商业软件的开发远不止编写代码和实现功能那么简单&#xff0c;尤其是在仪器自动测试领域&…

内容中台赋能人工智能技术提升业务创新能力

内容概要 在当今快速变化的市场环境中&#xff0c;企业需要不断寻求创新以保持竞争力。内容中台作为一种新型的内容管理架构&#xff0c;能够极大地提升企业在内容创建、管理和分发方面的效率。通过与人工智能技术的深度融合&#xff0c;企业能够将海量的数据和信息转化为有价…