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

python之字符串总结

 字符串(str)

对于字符串的学习,我整理了网上的一些资料,希望可以帮助到各位!!!

概述

由多个字母,数字,特殊字符组成的有限序列
字符串的定义:可以使用一对单引号或者双引号,也可以一对三个单引号或者一对三个双引号定义字符串。
注意: 没有单符号的数据类型
'a' "a"
s1 = 'hello, world!'
s2 = "你好,世界!"
print(s1, s2)
# 以三个双引号或单引号开头的字符串可以折行
s3 = '''
hello, 
world!
'''
print(s3, end='')

print函数中的end=' '表示输出后不换行,即将默认的结束符\n(换行符)更换为' '(空字符)

创建字符串 

#创建字符串
str="apple"
str1='orange'
print(type(str),type(str1))#<class 'str'> <class 'str'>#\转义字符作用:让一些符号失去原有的意义
str2 = "\"李白\""
str3 = '\'原神\''
print(str2, str3)
# "李白" '原神'#定义字符串的时候,单双引号可以互相嵌套
str4="'原神,'启动!!!'"
print(str4)
# '原神,'启动!!!'

拼接和重复(+、*)

s1 = 'hello' + ' ' + 'world'
print(s1)    # hello world
s2 = '!' * 3
print(s2)    # !!!
s1 += s2     # s1 = s1 + s2
print(s1)    # hello world!!!
s1 *= 2      # s1 = s1 * 2
print(s1)    # hello world!!!hello world!!!

比较运算(ord、is、id)

字符串的比较运算比较的是字符串的内容

如果不清楚两个字符对应的编码到底是多少,可以使用ord()函数来获得

s1 = 'a whole new world'
s2 = 'hello world'
print(s1 == s2, s1 < s2)  # False True
print(s2 == 'hello world')  # True
print(s2 == 'Hello world')  # False
print(s2 != 'Hello world')  # True
s3 = '李白'
print(ord('李'), ord('白'))  # 26446 30333
s4 = '秦始皇'
print(ord('秦'), ord('始'), ord('皇'))  # 31206 22987 30343
print(s3 > s4, s3 <= s4)  # False True

如果用is来比较两个字符串,它比较的是两个变量对应的字符串对象的内存地址

s1 = str(123)
s2 = str(123)
s3 = s2
# 比较字符串的内容
print(id(s1))#2293238767536
print(id(s2))#2293238767584
print(id(s3))#2293238767584
print(s1 == s2, s2 == s3)    # True True
# 比较字符串的内存地址
print(s1 is s2, s2 is s3)    # False True

字符串特殊处理(r、f、b、u)

1、字符串前加 r
r : 的作用是去除转义字符 .
即如果 是“\n”那么表示一个反斜杠字符 ,一个字母 n ,而不是表示换行了。
r 开头的字符,常用于正则表达式,对应着 re 模块。
2、字符串前加 f
#以f开头表示在字符串内支持大括号内的python表达式
import time
name = "py小王子"
t0 = time.time()
# 这里设一些耗时操作,用sleep模拟
time.sleep(10)
print(f'{name} done in {time.time() - t0:.2f}s')
# py小王子 done in 10.00s
3、字符串前加 b
b:前缀表示:后面字符串是bytes类型。网络编程中,服务器和浏览器只认bytes类型数据。
4、字符串前加u
例:u"我是含有中文字符组成的字符串。"
后面字符串以 Unicode 格式进行编码,一般用在中文字符串前面,防止因为源码储存格式问题,导致再次使用时出现乱码。

成员运算(in、not in)

s1 = 'hello, world'
print('wo' in s1)    # True
s2 = 'goodbye'
print(s2 in s1)      # False

循环遍历(range)

方法1、

s1 = 'hello'
for index in range(len(s1)):print(s1[index])

方法2、 

s1 = 'hello'
for ch in s1:print(ch)

字符串的下标和切片

下标 : 也叫索引 , 表示第几个数据
在程序中 , 下标一般从 0 开始 , 可以通过下标获取指定位置的数据
str1="welcome"
print(str1[0]) #w
print(str1[3]) #c
切片 : 从字符串中复制一段指定的内容 , 生成一个新的字符串
str2 = "welcome to beijing"
'''
切片的语法:
字符串[start:end:step]截取的字符串包含开始下标对应的字符串
start表示开始下标end表示结束下标
step表示步长
'''
print(str2[0:3])  # wel 包含start不包含end
print(str2[1:])  # elcome to beijing  若只设置了start表示从开始下标一直截取到最后
print(str2[:4])  # welc 若只设置了end表示从第一个字符开始一直截取到指定结束的位置
print(str2[1:4:2])  # ec
# print(str2[1:4:0])  # 在切片的时候,步长不能设置为0,ValueError: slice step cannot be zero
print(str2[::])  # welcome to beijing   若未设置开始和结束,表示复制字符串
print(str2[::-1])  # gnijieb ot emoclew   表示翻转字符串
print(str2[-9:-3])  # o beij    start和end若都为负数,表示从右边开始数

注意,因为字符串是不可变类型,所以不能通过索引运算修改字符串中的字符

 获取长度和次数(len、count)

str4 = "'原神,'启动!!!'"
# 获取字符串的长度len()
print(len(str4))  # 11# count()在整个字符串中查找子字符串出现的次数
str = "电脑卡了,ss电脑呢?"
print(str.count("电脑"))  # 2
# 在指定区间内查找出现的次数
print(str.count("电脑", 5, 30))  # 1

字符串查找(find、rfind、index)

#find()查找子串在字符串中第一次出现的位置,返回的是下标,若未找到返回-1ss3="123asdfASDCXaZ8765sahbzcd6a79"
print(ss3.find("a")) #3print(ss3.find("y")) #-1 未找到子串,返回-1#在指定区间内查找
print(ss3.find("a",5,20)) #12#rfind查找子串在字符串中最后一次出现的位置,返回的是下标,若未找到返回-1 print(ss3.rfind("a")) #25
print(ss3.rfind("y")) #-1#index()功能和find类似在字符串中未找到的时候,直接报错
print(ss3.index("d")) #5 
#print(ss3.index("y"))#ValueError:substringnotfound#max()min()依据ASCII码进行的获取print(max(ss3)) #z
print(min(ss3)) #1

大小写转换(upper、lower、title)

#2.字符串大小写转换upper()lower()
#upper()将字符串中的小写字母转换为大写
str1="i Miss you Very Much!"
print(str1.upper()) #I MISS YOU VERY MUCH!#lower()将字符串中的大写字母转化为小写
print(str1.lower()) #i miss you very much!#swapcase 将字符串中的大写转换为小写,将小写转换为大写]
print(str1.swapcase()) #I mISS YOU vERY mUCH!#title()将英文中每个单词的首字母转换为大写
str2="i love you forever!"
print(str2.title()) # I Love You Forever!

提取(strip)

# strip()去除字符串两边的指定字符(默认去除的是空格)
ss4 = " today is a nice day "
ss5 = "***today is a nice day****"
print(ss4)  # today is a nice day 
print(ss4.strip())  # today is a nice day
print(ss5)  # ***today is a nice day****
print(ss5.strip("*"))  # today is a nice day
# lstrip只去除左边的指定字符(默认去除的是空格)
print(ss5.lstrip("*"))  # today is a nice day****
# rstrip只去除右边的指定字符(默认去除的是空格)
print(ss5.rstrip("*"))  # ***today is a nice day

分割和合并(split、splitlines、join)

# split()以指定字符对字符串进行分割(默认是空格)
ss6 = "this is a string example.....wow!"
print(ss6.split())  # 以空格进行分割['this','is','a','string','example.....wow!']
print(ss6.split("i"))  # ['th', 's ', 's a str', 'ng example.....wow!']# splitlines()按照行切割
ss7 = '''将进酒
君不见黄河之水天上来,奔流到海不复回.
君不见高堂明镜悲白发,************.
'''
print(ss7)
print(ss7.splitlines())  # ['将进酒', '君不见黄河之水天上来,奔流到海不复回.', '君不见高堂明镜悲白发,************.']# join以指定字符进行合并字符串
ss8 = "-"
tuple1 = ("hello", "every", "body")
print(tuple1)  # ['将进酒', '君不见黄河之水天上来,奔流到海不复回.', '君不见高堂明镜悲白发,************.']
print(ss8.join(tuple1))  # hello-every-body

 替换(replace)

# 替换
# replace()对字符串中的数据进行替换
ss9 = "第五人格,启动!!第五人格,真好玩!!"
print(ss9)
print(ss9.replace("第五人格", "***"))  # ***,启动!!***,真好玩!!
# 控制替换的字符的次数
print(ss9.replace("第五人格", "***", 1))  # ***,启动!!第五人格,真好玩!!

判断(isupper、islower、isdigit、istitle、isalpha)

# 字符串判断
# isupper()检测字符串中的字母是否全部大写
print("ASDqwe123".isupper())  # False
print("ASD123".isupper())  # True
print()# islower()检测字符串中的字母是否全部小写
print("ASDqwe123".islower())  # False
print("qwe123".islower())  # True
print()# isdigit()检测字符串是否只由数字组成
print("1234".isdigit())  # True
print("1234asd".isdigit())  # False
print()# istitle()检测字符串中的首字母是否大写
print("Hello World".istitle())  # True
print("hello every body".istitle())  # False
print()# isalpha()检测字符串是否只由字母和文字组成
print("你好everyone".isalpha())  # True
print("你好everyone123".isalpha())  # False

前缀和后缀(startswith、endwith)

# 前缀和后缀:判断字符串是否以指定字符开头或者以指定字符结束# startswith()判断字符串是否以指定字符开头
# endwith()判断字符串是否以指定字符结束
s1 = "HelloPython"
print(s1.startswith("Hello"))  # True
print(s1.endswith("thon"))  # True

编解码(encode、decode)

# encode()编码
# decode()解码
s2 = "hello py小王子"
print(s2.encode())  # b'hello py\xe5\xb0\x8f\xe7\x8e\x8b\xe5\xad\x90'
print(s2.encode("utf-8"))  # b'hello py\xe5\xb0\x8f\xe7\x8e\x8b\xe5\xad\x90'
print(s2.encode("gbk"))  # b'hello py\xd0\xa1\xcd\xf5\xd7\xd3'
# 解码
s3 = b'hello py\xe5\xb0\x8f\xe7\x8e\x8b\xe5\xad\x90'
print(s3.decode())  # hello py小王子

ASCII码转换

chr()         将对应的ASCII码的值转换为对应的字符
ord()         获取对应字符的ASCII的值
print(chr(68))  # D
print(ord("a"))  # 97

格式化输出(%)

通过%来改变后面字母或者数字的含义,%被称为占位符

# 字符串格式化输出
'''
%占位符
%d表示整数
%f表示小数
%s表示字符串
%.3f(表示保留3位小数,保留的小数数位自己可以控制)
'''
name = "py小王子"
sex = "男"
money = 198987932.787532
print("我的姓名是:%s" % name)  # 我的姓名是:py小王子
print("我的大号是%s,性别是%s,我的财富是%.2f" % (name, sex, money))
# 我的大号是py小王子,性别是男,我的财富是198987932.79
# 还可以通过f"{}{}"这种方式实现格式化输出
print(f"我的大号是:{name},性别是:{sex},我的财富是{money}")  # 我的大号是:py小王子,性别是:男,我的财富是198987932.787532

格式化字符串(center、ljust、rjust)

在Python中,字符串类型可以通过center、ljust、rjust方法做居中、左对齐和右对齐的处理。如果要在字符串的左侧补零,也可以使用zfill方法。

s1 = 'hello, world'
print('wo' in s1)  # True
s2 = 'goodbye'
print(s2 in s1)  # Falses = 'hello, world'
# center方法以宽度20将字符串居中并在两侧填充*
print(s.center(20, '*'))  # ****hello, world****
# rjust方法以宽度20将字符串右对齐并在左侧填充空格
print(s.rjust(20))  # hello, world
# ljust方法以宽度20将字符串左对齐并在右侧填充~
print(s.ljust(20, '~'))  # hello, world~~~~~~~~
# 在字符串的左侧补零
print('33'.zfill(5))  # 00033
print('-33'.zfill(5))  # -0033

总结

Python中操作字符串可以用拼接、切片等运算符,也可以使用字符串类型的方法。

恭喜你学会了字符串,快去试试吧!!!

相关文章:

python之字符串总结

字符串&#xff08;str&#xff09; 对于字符串的学习&#xff0c;我整理了网上的一些资料&#xff0c;希望可以帮助到各位&#xff01;&#xff01;&#xff01; 概述 由多个字母&#xff0c;数字&#xff0c;特殊字符组成的有限序列 字符串的定义&#xff1a;可以使用一对…...

Flutter鸿蒙next 封装 Dio 网络请求详解:登录身份验证与免登录缓存

✅近期推荐&#xff1a;求职神器 https://bbs.csdn.net/topics/619384540 &#x1f525;欢迎大家订阅系列专栏&#xff1a;flutter_鸿蒙next &#x1f4ac;淼学派语录&#xff1a;只有不断的否认自己和肯定自己&#xff0c;才能走出弯曲不平的泥泞路&#xff0c;因为平坦的大路…...

sql server复制一张表(表结构或表数据)SQL语句整理

1. 复制表结构及数据到新表 CREATE TABLE 新表 SELECT * FROM 旧表;这种方法会复制 旧表 中的所有内容到 新表&#xff0c;但新表不会保留原表的主键、自动递增等属性。为了保持这些属性&#xff0c;需要使用 ALTER 语句进行后续处理 2. 只复制表结构到新表 使用条件始终为假…...

c语言-进位计数制

文章目录 一、进位计数制是什么&#xff1f;二、c语言1.二进制转十进制2.十进制转二进制 一、进位计数制是什么&#xff1f; 进位计数制简称进制&#xff0c;是人类用于计算数量的基本规则。 可使用数字符号的数目称为基数或底数&#xff0c;基数个数为n个&#xff0c;即可称n…...

记本地第一次运行seatunnel示例项目

前置 静态源码编译通过&#xff1a;https://blog.csdn.net/u011924665/article/details/143372464 参考 seatunnel官方的开发环境搭建文档&#xff1a;https://seatunnel.incubator.apache.org/zh-CN/docs/2.3.5/contribution/setup 安装scala 下载scala 去官网下载&…...

Threejs 实现 VR 看房完结

效果&#xff1a; threejs 3d Vr 看房 gitee 地址&#xff1a; threejs-3d-map: 1、threejs 实现3d 地图效果链接&#xff1a;https://blog.csdn.net/qq_57952018/article/details/1430539902、threejs 实现 vr 看房 主要代码&#xff1a; src/views/PanoramicView/index.vu…...

找出目标值在数组中的开始和结束位置(二分查找)

给你一个按照非递减顺序排列的整数数组 nums&#xff0c;和一个目标值 target。请你找出给定目标值在数组中的开始位置和结束位置。 如果数组中不存在目标值 target&#xff0c;返回 [-1, -1]。 你必须设计并实现时间复杂度为 O(log n) 的算法解决此问题。 示例 1&#xff1a…...

VSCode进阶之路

VSCode进阶之路&#xff1a;从入门到高效率开发 &#x1f680; Hey&#xff0c;朋友们好&#xff01;还在为VSCode的海量功能感到眼花缭乱吗&#xff1f;咱们一起来解锁VSCode的超神技能吧&#xff01; 开篇碎碎念 &#x1f3af; 第一次用VSCode时&#xff0c;就像个闯入魔法世…...

leetcode-21-合并两个有序链表

题解&#xff1a; 1、初始化哑节点dum 2、 3、 代码&#xff1a; 参考&#xff1a;leetcode-88-合并两个有序数组...

SSM项目部署到服务器

将SSM&#xff08;Spring Spring MVC MyBatis&#xff09;项目部署到服务器上&#xff0c;通常需要以下步骤&#xff1a; 打包项目 生成一个WAR文件&#xff0c;通常位于target目录下 配置Tomcat&#xff1a; 将生成的WAR文件复制到Tomcat的webapps目录下。 配置conf/se…...

【Linux】网络编程:初识协议,序列化与反序列化——基于json串实现,网络通信计算器中简单协议的实现、手写序列化与反序列化

目录 一、什么是协议&#xff1f; 二、为什么需要有协议呢&#xff1f; 三、协议的应用 四、序列化与反序列化的引入 什么是序列化和反序列化&#xff1f; 为什么需要序列化和反序列化&#xff1f; 五、序列化推荐格式之一&#xff1a;JSON介绍 六、网络版计算器编程逻…...

Educational Codeforces Round 171 (Rated for Div. 2)(A~D) 题解

Problem - A - Codeforces--PerpendicularSegments 思路:正方形对角线最长,并且相互垂直.直接输出即可. int x,y,k; void solve(){ //Acin>>x>>y>>k;int resmin(x,y);cout<<"0 0"<<" "<<res<<" &q…...

【教程】Git 标准工作流

目录 前言建仓&#xff0c;拉仓&#xff0c;关联仓库修改代码更新本地仓库&#xff0c;并解决冲突提交代码&#xff0c;合入代码其他常用 Git 工作流删除本地仓库和远程仓库中的文件日志打印commit 相关 前言 Git 是日常开发中常用的版本控制工具&#xff0c;配合代码托管仓库…...

Nico,从零开始干掉Appium,移动端自动化测试框架实现

开头先让我碎碎念一波~去年差不多时间发布了一篇《 UiAutomator Nico&#xff0c;一个基于纯 adb 命令实现的安卓自动化测试框》&#xff08;https://testerhome.com/topics/37042&#xff09;&#xff0c; 由于种种原因 (详见此篇帖子) 当时选择了用纯 adb 命令来实现安卓自动…...

PHP合成图片,生成海报图,poster-editor使用说明

之前写过一篇使用Grafika插件生成海报图的文章&#xff0c;但是当我再次使用时&#xff0c;却发生了错误&#xff0c;回看Grafika文档&#xff0c;发现很久没更新了&#xff0c;不兼容新版的GD&#xff0c;所以改用了intervention/image插件来生成海报图。 但是后来需要对海报…...

微信小程序 - 数组 push / unshift 追加后数组返回内容为数字(数组添加后打印结果为 Number 数值类型)

前言 假设一个空数组,通过 push 方法追加了一个项,控制台打印的结果竟然是 Number 数值。 例如,以下微信小程序代码: // 源数组 var arr = [] // 追加数据 var tem = arr.push(数据)...

1、DevEco Studio 鸿蒙仓颉应用创建

1. 仓颉鸿蒙应用简介 因为仓颉是静态编译型语言&#xff0c;使用仓颉开发的应用执行效率更高。而且主打全场景&#xff0c;后续可并入仓颉生态&#xff0c;其和ArkTS都是基于ArkUI进行开发&#xff0c;最大的区别是typescript和仓颉语法间的差异。 2. 应用创建 前置条件&…...

从头开始学PHP之面向对象

首先介绍下最近情况&#xff0c;因为最近入职了且通勤距离较远&#xff0c;导致精力不够了&#xff0c;而且我发现&#xff0c;人一旦上了班&#xff0c;下班之后就不想再进行任何脑力劳动了&#xff08;对大部分牛马来说&#xff0c;精英除外&#xff09;。 话不多说进入今天的…...

C++ | Leetcode C++题解之第519题随机翻转矩阵

题目&#xff1a; 题解&#xff1a; class Solution { public:Solution(int m, int n) {this->m m;this->n n;this->total m * n;srand(time(nullptr));}vector<int> flip() {int x rand() % total;vector<int> ans;total--; // 查找位置 x 对应的…...

vrrp和mstp区别

思路 vrrp是用来虚拟网关&#xff0c;噢&#xff0c;是虚拟一条虚拟网关 优先级&#xff0c;priority越大越优先&#xff0c;优先级相同&#xff0c;哪个的路由器的vrrp先起来&#xff0c;谁就是主 mstp是快速生成树协议&#xff0c;防止环路用的 优先级越小越优先 华为命令…...

TikTokDownload:5分钟掌握抖音去水印批量下载终极方案

TikTokDownload&#xff1a;5分钟掌握抖音去水印批量下载终极方案 【免费下载链接】TikTokDownload 抖音去水印批量下载用户主页作品、喜欢、收藏、图文、音频 项目地址: https://gitcode.com/gh_mirrors/ti/TikTokDownload 想要轻松保存抖音上的精彩内容却苦于官方水印…...

别再只盯着M.2了!手把手教你玩转Mini PCIe接口,给老旧笔记本/工控设备加装4G模块和固态硬盘

别再只盯着M.2了&#xff01;手把手教你玩转Mini PCIe接口&#xff0c;给老旧笔记本/工控设备加装4G模块和固态硬盘 当大家都在追逐M.2 NVMe固态硬盘的速度时&#xff0c;一个被忽视的接口正在老旧设备里"沉睡"——那就是Mini PCIe。这个藏在笔记本电脑无线网卡下方或…...

ITK-SNAP:掌握医学图像分割的5个关键步骤

ITK-SNAP&#xff1a;掌握医学图像分割的5个关键步骤 【免费下载链接】itksnap ITK-SNAP medical image segmentation tool 项目地址: https://gitcode.com/gh_mirrors/it/itksnap ITK-SNAP是一款功能强大的开源医学图像分析软件&#xff0c;专门用于3D医学影像的分割、…...

鸿蒙与Kotlin跨平台开发中的性能与功耗深度优化实践

摘要:本文聚焦KMP(Kotlin Multiplatform)与鸿蒙(ArkTS)集成开发中的性能与功耗优化,结合架构设计、系统级调优及实战案例,提供可落地的解决方案。全文涵盖核心优化领域:内存管理、渲染管线、跨进程通信、功耗模型分析等,适用于中大型项目迁移与重构。 一、KMP跨平台模…...

策略即代码:从理念到实践,构建自动化合规与安全防线

1. 项目概述与核心价值 最近在整理团队内部的开发规范时&#xff0c;发现了一个非常有意思的仓库&#xff1a; vectimus/policies 。乍一看这个名字&#xff0c;你可能会觉得这只是一个存放公司政策文档的普通地方&#xff0c;但如果你深入进去&#xff0c;会发现它远不止于此…...

杰理之主机插拔U盘,从机较高概率出现无声情况【篇】

switch节点初始丢数据时后续节点状态错误导致时间戳异常问题&#xff08;对应rx无声&#xff09;...

CellProfiler:生物图像分析的瑞士军刀,让科研更智能更高效

CellProfiler&#xff1a;生物图像分析的瑞士军刀&#xff0c;让科研更智能更高效 【免费下载链接】CellProfiler An open-source application for biological image analysis 项目地址: https://gitcode.com/gh_mirrors/ce/CellProfiler 你是否曾经面对成百上千张细胞图…...

Cesium实战:手把手教你用JavaScript实现5个酷炫的3D地图特效(雷达扫描/淹没分析/动态绘制)

Cesium实战&#xff1a;手把手教你用JavaScript实现5个酷炫的3D地图特效&#xff08;雷达扫描/淹没分析/动态绘制&#xff09; 在三维地理信息可视化领域&#xff0c;Cesium凭借其强大的WebGL渲染能力和灵活的JavaScript API&#xff0c;已成为开发者构建沉浸式空间应用的首选引…...

AI商品计划:中国鞋服零售如何用机器学习解决库存与周转难题

过去十年&#xff0c;中国鞋服零售经历了从线下到线上、从粗放铺货到精准运营的剧烈转变。但一个老问题始终没变&#xff1a;该备多少货&#xff0c;备在哪&#xff0c;备什么颜色尺码。备多了&#xff0c;资金压在仓库&#xff0c;季末折扣吞噬利润&#xff1b;备少了&#xf…...

LSM6DS3TR-C与磁力计集成:九轴数据融合与姿态解算实践

1. 项目概述&#xff1a;从运动传感器到磁力计的数据融合在之前的系列文章中&#xff0c;我们已经深入探讨了LSM6DS3TR-C这款六轴惯性测量单元&#xff08;IMU&#xff09;在加速度计和陀螺仪数据采集、运动检测算法实现等方面的应用。今天&#xff0c;我们将把目光投向一个同样…...