03_Python 字符串

本文详细介绍了Python中的字符串表示方法,包括双引号、单引号、三引号的使用。此外,还讲解了字符串的连接与重复、切片、遍历、与数字和列表的转化,以及查找、替换、拆分合并、大小写转换等常用方法。通过实例展示了如何在Python中高效地操作字符串。
摘要由CSDN通过智能技术生成

今天对Python中的字符串作一个较为系统的讲解,也顺便重新整理一下字符串部分的笔记。

1.表示

关于Python字符串的表示方法直接以下方代码为例。

str1 = "ABC123"        	# 双引号表示 常用
str2 = 'ABC123'        	# 单引号表示
str3 = '"abc"145QWE'   	# 内部只含双引号,外部用单引号
str4 = "'abc'145QWE"   	# 内部只含单引号,外部用双引号
print(str1)   			# ABC123
print(str2)  			# ABC123
print(str3)  			# "abc"145QWE
print(str4)  			# 'abc'145QWE

str5 = """ABC"""               # 三个双引号
str6 = '''abc'''               # 三个单引号
str7 = ''' "abc"145'QWE' '''   # 内部即含单引号又含双引号,外部用三个单引号或双引号
str8 = """ "abc"145'QWE' """
print(str5)  			# ABC
print(str6)  			# abc
print(str7)  			#  "abc"145'QWE' 
print(str8)  			#  "abc"145'QWE'

鉴于大多数编程语言中的字符串用双引号表示,所以建议Python中的字符串也统一用双引号表示。当双引号表示法不满足时,再考虑使用单引号三个单引号或三个双引号表示。


2.连接与重复

方法说明
+字符串连接
*字符串重复
str1 = "ABCD" + "1234"
print(str1)     # ABCD1234

str2 = "A"*10
print(str2)     # ABCD1234


3.字符串切片

常用切片方法说明
s[i]取第i个字符(i>=0为正序,i<=-1为逆序)。
s[i:k]取第i~第k-1位置的字符。
s[i:-1]取第i~倒数第2个字符。
s[i::]取第i个位置及其后面的所有字符。
s[i:len(s)]取第i个位置及其后面的所有字符。
s[::-1]逆序
slice()Python内置切片函数(一般不用)
str1 = "Python"
print(str1[1])            # 取第1个字符            ==> y
print(str1[-1])           # 取倒数第1个字符        ==> n
print(str1[-2])           # 取倒数第2个字符        ==> o
print(str1[0:3])          # 取0,1,2位置的字符      ==> Pyt
print(str1[0:-1])         # 取第0个到倒数第2个字符  ==> Pytho
print(str1[0::])          # 取所有字符             ==> Python
print(str1[0:len(str1)])  # 取所有字母             ==> Python
print(str1[::-1])         # 逆序                   ==> nohtyP

myslice = slice(0,3)      # Python内置切片函数
print(str1[myslice])      # 取0,1,2位置的字符      ==> Pyt


4.字符串遍历

string = "Python"
# 按索引遍历
for i in range(len(string)):
    print(string[i])
"""
P
y
t
h
o
n
"""

# 按值遍历
for s in string:
    print(s)
"""
P
y
t
h
o
n
"""

# 同时遍历索引和值
for idx,s in enumerate(string):
    print(idx,s)
"""
0 P
1 y
2 t
3 h
4 o
5 n
"""


5.字符串与数字和列表的相互转化

字符串 <==> 数字

# 字符串 ==> 数字
num1 = int("23")         # 整型str只能用int转换
num2 = float("2.02")     # 浮点型str只能用float转换
print(num1,type(num1))   # 23 <class 'int'>
print(num2,type(num2))   # 2.02 <class 'float'>

# 数字 ==> 字符串
str1 = str(23)
str2 = str(2.02)
print(str1,type(str1))   # 23 <class 'str'>
print(str2,type(str2))   # 2.02 <class 'str'>

字符串 <==> 列表

# 字符串 ==> 列表
string = "Python"
str_list = [s for s in string]
print(str_list)  # ['P', 'y', 't', 'h', 'o', 'n']

# 列表 ==> 字符串
str_list = ['P', 'y', 't', 'h', 'o', 'n']
new_str = "".join(str_list)  # str_list列表中的元素必须为字符串
print(new_str)   # Python

new_str = "".join(map(str,[i for i in range(5)]))  # 将[0,1,2,3,4]转换为"01234"
print(new_str)   # 01234


6.常用方法

6.1 查找

方法说明
find(s)在字符串中查找子串s,如果子串s存在则返回子串开始的位置下标;否则,返回-1。
index(s)在字符串中查找子串s,如果子串s存在则返回子串开始的位置下标;否则,报错。
count(s)返回子串s在字符串中出现的次数。
string = "New to Python or choosing between Python 2 and Python 3?"

# find()方法
print(string.find("Python"))  # 7
print(string.find("python"))  # -1

# index()方法
find_str = "Python"           # ==> 7
find_str = "python"           # ==> python is not in string
try:
    idx = string.index(find_str)
    print(idx)
except:
    print("{} is not in string".format(find_str))

# count()方法
print(string.count("Python"))  # 3


6.2 修改

6.2.1 替换

方法说明
replace(old, new)字符串替换。
format(*args, **kwargs)将字符串中的{}替换为format()参数。
# replace()方法
string = "New to Python or choosing between Python 2 and Python 3?"
string = string.replace("Python","python")
print(string)
# New to python or choosing between python 2 and python 3?

# format()方法
str1 = "Python"
idx1 = 2
idx2 = 3
new_str = "New to {} or choosing between Python {} and Python {}?".format(str1,idx1,idx2)
print(new_str)
# New to Python or choosing between Python 2 and Python 3?


6.2.2 拆分合并

方法说明
split(sep=None)按照指定字符分隔字符串,返回列表。默认按空格分隔。
splitlines()按换行分隔字符串,返回列表。
partition(sep)使用分隔符把字符串拆分成三个部分,返回列表。
join(iterable)将多个字符串合并为一个新的字符串。
# split()方法
str1 = "Life is short, I use python"
print(str1.split())
# ['Life', 'is', 'short,', 'I', 'use', 'python']
print(str1.split(","))
# ['Life is short', ' I use python']

# splitlines()方法
str2 = "Life is short,\n I use python"
print(str2.splitlines())
# ['Life is short,', ' I use python']

# partition()方法
str3 = "Life is short, I use python"
print(str3.partition(","))
# ('Life is short', ',', ' I use python')

# join()方法
str4 = "q.".join(["A","B","C","D"])  # 合并到已有字符的字符串中
print(str4)  # Aq.Bq.Cq.D

str5 = "".join(["A","B","C","D"])    # 合并到空字符串中
print(str5)  # ABCD

str6 = "".join(map(str,[i for i in range(10)])) # iterable为可迭代对象
print(str6)  # 0123456789


6.2.3 大小写转换

方法说明
capitalize()将字符串第一个字母转换成大写。
title()将字符串每个单词首字母转换为大写。
lower()将字符串中的大写字母转换为小写字母。
upper()将字符串中的小写字母转换为大写字母。
swapcase()把字符串中的小写转换为大写,大写转换为小写。
# capitalize()方法
str1 = "life is short"
str1 = str1.capitalize()
print(str1)  # Life is short

# title()方法
str2 = "Life is short,I use Python."
str2 = str2.title()
print(str2)  # str2.title()

# lower()方法
str3 = "Life is short,I use Python."
str3 = str3.lower()
print(str3)  # life is short,i use python.

# upper()方法
str4 = "Life is short,I use Python."
str4 = str4.upper()
print(str4)  # LIFE IS SHORT,I USE PYTHON.

# swapcase()方法
str5 = "Life is short,I use Python."
str5 = str5.swapcase()
print(str5)  # lIFE IS SHORT,i USE pYTHON.


6.2.4 文本对齐

方法说明
ljust(width, fillchar=’ ')返回一个原字符串左对齐,并使用指定字符(默认空格)填充至对应长度的新字符串。
rjust(width, fillchar=’ ')返回一个原字符串右对齐,并使用指定字符(默认空格)填充至对应长度的新字符串。
center(width, fillchar=’ ')返回一个原字符串居中对齐,并使用指定字符(默认空格)填充至对应长度的新字符串。
str1 = "Life is short"
str_list = str1.split()
# ljust()方法
for idx,s in enumerate(str_list):
    print(s.ljust(7,"-"),idx)
"""
Life--- 0
is----- 1
short-- 2
"""

# rjust()方法
for idx,s in enumerate(str_list):
    print(s.rjust(7,"-"),idx)
"""
---Life 0
-----is 1
--short 2
"""

# center()方法
for idx,s in enumerate(str_list):
    print(s.center(7,"-"),idx)
"""
--Life- 0
---is-- 1
-short- 2
"""


6.2.5 删除空白符

方法说明
lstrip(chars=None)删除字符串左侧的指定字符,默认删除空白符。
rstrip(chars=None)删除字符串右侧的指定字符,默认删除空白符。
strip(chars=None)删除字符串两侧侧的指定字符,默认删除空白符。
# strip()方法
str1 = "  Python  "
new_str1 = str1.strip()  # 删除字符串两侧的空白符
print(str1,len(str1))          #   Python   10
print(new_str1,len(new_str1))  # Python 6

str2 = ".Python.."
new_str2 = str2.strip(".")  # 删除字符串两侧的"."
print(str2,len(str2))          # .Python.. 9
print(new_str2,len(new_str2))  # Python 6


6.3 判断

方法说明
isalnum()判断字符串是否只含字母或数字,是则返回True;否则返回False。
isalpha()判断字符串是否只含字母,是则返回True;否则,返回False。
isdigit()判断字符串是否只包含数字,是则返回True;否则,返回False。
islower()判断字符串是否只包含小写字母(+其他字符)。
isupper()判断字符串是否只包含大写字母(+其他字符)。
istitle()判断字符串中只含字母的子串首字母是否都大写,是则返回True;如果子串除含有字母外还含有其他字符(除去其他字符在子串两端的情况),或者存在仅含字母的子串首字母小写,或者不存在含字母的字符串,则返回False。
isspace()判断字符串是否只包含空格,是则返回True;否则,返回False。(空字符串返回False)。
str1 = "abcDEF486&()+  ?"
str2 = "abcDEF486"
print(str1.isalnum())  # False
print(str2.isalnum())  # True

str3 = "abcDEF890"
str4 = "abcDEF"
print(str3.isalpha())  # False
print(str4.isalpha())  # True

str5 = "890"
print(str3.isdigit())  # False
print(str5.isdigit())  # True

str6 = "abc15&)* "
str7 = "abC15&)* "
str8 = "&)* "
print(str6.islower())  # True
print(str7.islower())  # False
print(str8.islower())  # False

str9 = "ABC89^*()["
str10 = "ABc89^*()["
print(str9.isupper())  # True
print(str10.isupper()) # False

str11 = "Adsy Aree? 90 A (_^(**"
str12 = "--Adsy 09Aree? 90 A (_^(**"
str13 = "Adsy aree? 90 A (_^(**"
str14 = "A-dsy 09Aree? 90 A (_^(**"
str15 = "09(_^(**"
print(str11.istitle())  # True
print(str12.istitle())  # True
print(str13.istitle())  # False
print(str14.istitle())  # False
print(str15.istitle())  # False

str16 = "  "
str17 = " abc "
str18 = ""
print(str16.isspace())  # True
print(str17.isspace())  # False
print(str18.isspace())  # False


注:上述代码中用到两个Python内置函数map()和enumerate(),有不明白的可以在我之前的文章中查看 [02_Python常用内置函数](https://blog.csdn.net/weixin_43675917/article/details/109591089)。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
,发送类别,概率,以及物体在相机坐标系下的xyz.zip目标检测(Object Detection)是计算机视觉领域的一个核心问题,其主要任务是找出图像中所有感兴趣的目标(物体),并确定它们的类别和位置。以下是对目标检测的详细阐述: 一、基本概念 目标检测的任务是解决“在哪里?是什么?”的问题,即定位出图像中目标的位置并识别出目标的类别。由于各类物体具有不同的外观、形状和姿态,加上成像时光照、遮挡等因素的干扰,目标检测一直是计算机视觉领域最具挑战性的任务之一。 二、核心问题 目标检测涉及以下几个核心问题: 分类问题:判断图像中的目标属于哪个类别。 定位问题:确定目标在图像中的具体位置。 大小问题:目标可能具有不同的大小。 形状问题:目标可能具有不同的形状。 三、算法分类 基于深度学习的目标检测算法主要分为两大类: Two-stage算法:先进行区域生成(Region Proposal),生成有可能包含待检物体的预选框(Region Proposal),再通过卷积神经网络进行样本分类。常见的Two-stage算法包括R-CNN、Fast R-CNN、Faster R-CNN等。 One-stage算法:不用生成区域提议,直接在网络中提取特征来预测物体分类和位置。常见的One-stage算法包括YOLO系列(YOLOv1、YOLOv2、YOLOv3、YOLOv4、YOLOv5等)、SSD和RetinaNet等。 四、算法原理 以YOLO系列为例,YOLO将目标检测视为回归问题,将输入图像一次性划分为多个区域,直接在输出层预测边界框和类别概率。YOLO采用卷积网络来提取特征,使用全连接层来得到预测值。其网络结构通常包含多个卷积层和全连接层,通过卷积层提取图像特征,通过全连接层输出预测结果。 五、应用领域 目标检测技术已经广泛应用于各个领域,为人们的生活带来了极大的便利。以下是一些主要的应用领域: 安全监控:在商场、银行
目标检测(Object Detection)是计算机视觉领域的一个核心问题,其主要任务是找出图像中所有感兴趣的目标(物体),并确定它们的类别和位置。以下是对目标检测的详细阐述: 一、基本概念 目标检测的任务是解决“在哪里?是什么?”的问题,即定位出图像中目标的位置并识别出目标的类别。由于各类物体具有不同的外观、形状和姿态,加上成像时光照、遮挡等因素的干扰,目标检测一直是计算机视觉领域最具挑战性的任务之一。 二、核心问题 目标检测涉及以下几个核心问题: 分类问题:判断图像中的目标属于哪个类别。 定位问题:确定目标在图像中的具体位置。 大小问题:目标可能具有不同的大小。 形状问题:目标可能具有不同的形状。 三、算法分类 基于深度学习的目标检测算法主要分为两大类: Two-stage算法:先进行区域生成(Region Proposal),生成有可能包含待检物体的预选框(Region Proposal),再通过卷积神经网络进行样本分类。常见的Two-stage算法包括R-CNN、Fast R-CNN、Faster R-CNN等。 One-stage算法:不用生成区域提议,直接在网络中提取特征来预测物体分类和位置。常见的One-stage算法包括YOLO系列(YOLOv1、YOLOv2、YOLOv3、YOLOv4、YOLOv5等)、SSD和RetinaNet等。 四、算法原理 以YOLO系列为例,YOLO将目标检测视为回归问题,将输入图像一次性划分为多个区域,直接在输出层预测边界框和类别概率。YOLO采用卷积网络来提取特征,使用全连接层来得到预测值。其网络结构通常包含多个卷积层和全连接层,通过卷积层提取图像特征,通过全连接层输出预测结果。 五、应用领域 目标检测技术已经广泛应用于各个领域,为人们的生活带来了极大的便利。以下是一些主要的应用领域: 安全监控:在商场、银行
目标检测(Object Detection)是计算机视觉领域的一个核心问题,其主要任务是找出图像中所有感兴趣的目标(物体),并确定它们的类别和位置。以下是对目标检测的详细阐述: 一、基本概念 目标检测的任务是解决“在哪里?是什么?”的问题,即定位出图像中目标的位置并识别出目标的类别。由于各类物体具有不同的外观、形状和姿态,加上成像时光照、遮挡等因素的干扰,目标检测一直是计算机视觉领域最具挑战性的任务之一。 二、核心问题 目标检测涉及以下几个核心问题: 分类问题:判断图像中的目标属于哪个类别。 定位问题:确定目标在图像中的具体位置。 大小问题:目标可能具有不同的大小。 形状问题:目标可能具有不同的形状。 三、算法分类 基于深度学习的目标检测算法主要分为两大类: Two-stage算法:先进行区域生成(Region Proposal),生成有可能包含待检物体的预选框(Region Proposal),再通过卷积神经网络进行样本分类。常见的Two-stage算法包括R-CNN、Fast R-CNN、Faster R-CNN等。 One-stage算法:不用生成区域提议,直接在网络中提取特征来预测物体分类和位置。常见的One-stage算法包括YOLO系列(YOLOv1、YOLOv2、YOLOv3、YOLOv4、YOLOv5等)、SSD和RetinaNet等。 四、算法原理 以YOLO系列为例,YOLO将目标检测视为回归问题,将输入图像一次性划分为多个区域,直接在输出层预测边界框和类别概率。YOLO采用卷积网络来提取特征,使用全连接层来得到预测值。其网络结构通常包含多个卷积层和全连接层,通过卷积层提取图像特征,通过全连接层输出预测结果。 五、应用领域 目标检测技术已经广泛应用于各个领域,为人们的生活带来了极大的便利。以下是一些主要的应用领域: 安全监控:在商场、银行
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值