Python字符串

1、字符串列举

# 字符串是使用单引号('')或者双引号("")包裹起来的一串字符。字符串是不可变类型,创建之后所有的字符都不能再修改。可以通过isinstance函数可以判断一个变量是否是字符串。
str1 = "hello world"
print(isinstance(str1,str))# 返回值的结果为:True
str2 = 'hello world'
print(isinstance(str2,str))# 返回值的结果为:True

# 多行字符串可以使用三重引号('''''')来表示,通常称为“长字符串”
str3 = '''
hello
world
'''
print(str3)

2、字符串的索引和切片

字符串的本质是字符的组合,在一个字符串中,其每一个组成部分都称为一个字符。每个字符所在的位置称为“字符的偏移量”,通过偏移量来查询字符串中指定位置字符的方法称为“索引”。

字符串的索引分为两种:正向索引和反向索引。正向索引指的是从左向右的顺序索引,从0开始,依次增加1;反向索引是从右向左的索引,从-1开始,依次减少1。

正向索引012345678910
字符串helloworld
反向索引-11-10-9-8-7-6-5-4-3-2-1
# 字符串的索引
str1 = "hello world"
# 正向索引顺序
print(str1[0]) # 返回值的结果为:h
print(str1[4]) # 返回值的结果为:o
# 反向索引顺序
print(str1[-5]) # 返回值的结果为:w
print(str1[-1]) # 返回值的结果为:d

在Python中,由于字符串是不可变类型,创建之后所有的字符都不能再修改。如果想修改字符串,那么修改字符串都是通过字符串拼接的方法实现的。

# 更改str1字符串的str1[5]元素,将空格" "改为感叹号"!"
str1 = "hello world"
strleft = str1[0:5]
strright = str1[6:11]
strnew = strleft + '!' + strright
print(strnew) # 返回值的结果为:hello!world

字符串的切片操作与列表的对应操作类似,不同点在于返回的是一个字符串而不是列表。由于返回值是源字符串的一部分,所以这里也可以将返回值称为源字符串的”子字符串“,称为”子串“。

str1 = "hello world"

# 返回[m,n]的子串,使用str1[m:n],m必须小于n,返回值包含m而不包含n。对于反向索引时也是一样的。如果使用了错误的索引值后,系统返回的是一个空字符串,而不会提示一个错误或者异常
print(str1[1:3]) # 返回值的结果为:el
print(str1[-3:-1]) # 返回值的结果为:rl

# 使用了错误索引,所以返回值为空字符。切片的时候左边的值(-1)必须小于右边的值(-3),在这里-1是大于-3的,所以返回了空字符。
print(str1[-1:-3]) # 返回值的结果为: 

# 返回m或者n如果是字符串的开头或者结尾,那么就可以不写。
print(str1[:3]) # 返回值的结果为:hel
print(str1[3:]) # 返回值的结果为:lo world
print(str1[:-3]) # 返回值的结果为:hello wo
print(str1[-3:]) # 返回值的结果为:rld
print(str1[:]) # 返回值的结果为:hello world

# str[m::n]的切片方法,用于从字符串的索引值为m开始,每n个字符取出一次的情况。
# 从左向右索引,每2个字符取一个。
print(str1[1::2]) # 返回值的结果为:el ol
print(str1[-8::2]) # 返回值的结果为:l ol

# 从右向左索引,每2个字符取一个
print(str1[8::-2]) # 返回值的结果为:rwolh
print(str1[-2::-2]) # 返回值的结果为:lo le

# 如果默认不写m,默认m为0或-1
print(str1[::2]) # 返回值的结果为:hlowrd
print(str1[::-2]) # 返回值的结果为:drwolh

# 如果不写n,默认n为1
print(str1[2::]) # 返回值的结果为:llo world
print(str1[-2::]) # 返回值的结果为:ld

# 如果m和n都不写,默认m为0,n为1
print(str1[::]) # 返回值的结果为:hello world

3、字符串的拼接

字符串的拼接主要包括加号拼接、%拼接、join函数、format函数和格式化字符串等方法。

# 加号拼接,该方法简单明了,但是效率不高。原因是Python的字符串是不可变类型,因此,一个字符串在生成之后,如果进行修改,就只能生成一个新的字符串。
str1 = 'hello '
str2 = 'world'
str3 = str1+str2
print(str3) # 返回的结果值为:hello world

# %拼接,%s是一个占位符,表示该位置将被一个字符串(str)类型的值替换。%操作符随后用于执行替换操作,将str2的值插入到str1中%s所在的位置。常在Python2中使用,Python3推荐使用format方法。
str1 = 'hello %s'   
str2 = 'world'  
result = str1 % str2  
print(result)  # 返回的结果值为:hello world

# join函数拼接,可以将一个列表拼接为一个字符串,这种方式被广泛地用于生成参数表。
print("!".join(["hello","world"])) # 返回值的结果为:hello!world

# format函数
print("{} {}".format(str1,str2)) # 返回值的结果为:hello  world

4、特殊字符和字符转义

在字符串的实际应用过程中,存在着一些无法直接显示的字符,比如换行符、水平制表符、在双引号中使用双引号等,这些字符被称为”特殊字符“。

为了在字符串中表达这些字符,就需要使用字符转义的形式来写。字符转义的方法是使用”\“加一些特定字符。

转义字符含义
\newline使用时是反斜杠加换行
实际效果是反斜杠加换行全部被忽略。
\\反斜杠(\)
\’单引号(')
\"双引号(")
\n换行符(LF)
\r回车符(CR)
\t水平制表符(TAB)
\ooo表示一个八进制数码位的字符,比如\141表示的是字母a
\xhh表示一个十六进制数码位的字符,比如\x61表示的是字母a
# 使用\newline,打印出来的str1没有回车换行。hello world在同一行。
str1 = """\
hello \
world\
"""
print(str1) # 返回值的结果为:hello world

# 使用\'、\"、\n、\r和\t
str1 = "\'hello\'\r\n\t\"world\""
print(str1)
# 注意,如果包裹的引号和字符串中使用的引号不同,那么引号可以不转义。

# 使用\ooo或者\xhh,这里的码位指的是ASCII码字符的码位。比如字母'a'在ASCII码中的码位是97(十进制),转换为八进制是141,转换为十六进制是61
print("\141") # 返回值的结果为:a
print("\x61") # 返回值的结果为:a
# 注意,\ooo代表着最多只能使用一个3位的八进制数。\xhh代表着只能使用2位的十六进制数。比如0x0A要写成"\x0A"而不能写成“\xA”

5、原始字符串和格式化字符串

对于某些应用场景,如果有大量的需要转义的字符“\”,那就比较麻烦了,为了避免这种情况,Python提供了“原始字符串”的概念。就是在字符串前加入先导符“r”(也可以是“R”),然后字符串的所有内容都不会被转义。

str1 = r"\"hello\" \"world\""
print(str1) # 返回值的结果为:\"hello\" \"world\"
str1 = "\"hello\" \"world\""
print(str1) # 返回值的结果为:"hello" "world"

在字符串拼接时,很多时候并不能直接简单地将数量值与字符串拼接在一起。这就需要使用到“格式化字符串”的特殊字符串。

# 保留两位小数
print("{} {:.2f}".format("Python",3)) # 返回值的结果为:Python 3.00

# ">"是居右,"10"是填充宽度(宽度要大于字符串的宽度),"+"是填充的文本
print("{0:+>10}".format("Python")) # 返回值的结果为:++++Python

# "<"是居左,"10"是填充宽度(宽度要大于字符串的宽度),"+"是填充的文本
print("{0:+>10}".format("Python")) # 返回值的结果为:Python++++

# "^"是居中,"10"是填充宽度(宽度要大于字符串的宽度),"+"是填充的文本
print("{0:+>10}".format("Python")) # 返回值的结果为:++Python++

# "="比较特殊,只能用在数字上,表示填充时把填充文本放在正负号的右边
print("{0:=+10}".format(3)) # 返回值的结果为:+        3
print("{0:+10}".format(3)) # 返回值的结果为:        +3

# "-"在正数是不显示的,在负数里面可以显示
print("{0:=-10}".format(3)) # 返回值的结果为:         3
print("{0:=-10}".format(-3)) # 返回值的结果为:-        3

# "+"在负数是不显示的,在正数里面可以显示
print("{0:=+10}".format(-3)) # 返回值的结果为:-        3
print("{0:=+10}".format(3)) # 返回值的结果为:+        3

# "+000000003"和"-000000003"表示方法
print("{0:=+010}".format(3)) # 返回值的结果为:+000000003
print("{0:0=+10}".format(3)) # 返回值的结果为:+000000003
print("{0:=-010}".format(-3)) # 返回值的结果为:-000000003
print("{0:0=-10}".format(-3)) # 返回值的结果为:-000000003

# 其他进制表示方法,在符号显示规则后面的“#”,表示以二进制显示,则显示前导符“0b”,以八进制显示,则显示前导符“0o”,以十六进制显示,则显示前导符“0x”。
print("{0:#10b}".format(3)) # 返回值的结果为:      0b11
print("{0:#10o}".format(3)) # 返回值的结果为:       0o3
print("{0:#10x}".format(3)) # 返回值的结果为:       0x3

# 千分位分隔符只有“,”、“-”两种
print("{0:10,}".format(1000000)) # 返回值的结果为: 1,000,000
print("{0:10_}".format(1000000)) # 返回值的结果为: 1_000_000

# 千分位分隔符之后的小数精度,显示小数位,不足的部分用0补齐,保留两位小数。
print("{0:010,.2f}".format(1000000)) # 返回值的结果为:1,000,000.00

# 显示“小数精度”位有效数字,但是这里有效数字超出,因此改为显示科学计数法显示
print("{0:.3g}".format(1000000)) # 返回值的结果为:1e+06

# 注意,格式化规则必须严格按照顺序书写,否则就会报错。

# 除了format函数,还可以使用“f-string”的方法来格式化
str1 = "Python"
str2 = 3
f"{str1}:{str2:.2f}" # 返回值的结果为:'Python:3.00'

6、字符串的编码

字符串的编码的具体内容自行查找ASCII码相关知识。了解中文是如何编码的,都有什么相关的编码方式。

# Python中,可以使用chr函数将一个ASCII码可显示字符转换为其对应的数字,也可以使用ord函数进行反向转换
print(chr(97)) # 返回值的结果为:a
print(ord('a')) # 返回值的结果为:97

# Python中,将一个字符串转换为若干个字节,需要在字符串前面加字母“b”
str1 = b'abc'
print(type(str1)) # 返回值的结果为:<class 'bytes'>
print(str1[0]) # 返回值的结果为为:97

7、字符串的常用操作

字符串的常用操作可以分为两种,即类型转换函数和字符串操作函数。

# 类型转换函数int、long、float、complex、tuple、list、chr、ord、unichr、hex和oct。
print(list("hello world"))

# 表达式转换函数eval。
a = 1
b = 2
print(eval("a+b")) # 返回值的结果为:3

# len函数
str1 = "hello world"
print(len(str1)) # 返回值的结果为:11

# lower和upper函数,大小写转换
str1 = "hello world"
print(str1.upper()) # 返回值的结果为:HELLO WORLD
str1 = "HELLO WORLD"
print(str1.lower()) # 返回值的结果为:hello world

# find函数,查询
str1 = "hello world"
print(str1.find("lo")) # 返回值的结果为:3
# 设置开始位置为:5 结束位置为:11
print(str1.find("l",5,11)) # 返回值的结果为:9

# split函数,字符串分解
str1 = "hello world !"
print(str1.split(" ")) # 返回值的结果为:['hello', 'world','!']
# 只分隔第一个空格
print(str1.split(" ",1)) # 返回值的结果为:['hello', 'world !']
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值