08-字符串str

本文详细介绍了Python中的字符串基础知识,包括字符串的驻留机制,创建字符串的不同方法,以及字符串的各种操作如查询、大小写转换、对齐、劈分、判断、替换和拼接。此外,还讨论了字符串的比较、切片操作和格式化,以及字符串的编码与解码转换,强调了不同编码格式对存储和传输的影响。

字符串

字符串是Python中基本数据类型,是一个不可变的字符序列【元组也是不可变序列】。

字符串驻留机制

字符串驻留机制–仅保留一个相同且不可变字符串的方法,不同的值被存放在字符串的驻留池中,Python的驻留机制对相同的字符串只保留一份拷贝,后续创建相同字符串时,不会开辟新空间。

驻留机制的几种情况(交互模式)

  1. 字符串的长度为0或者1时
  2. 符合标识符的字符串【字母、数字、下标线】
  3. 字符串只在编译时进行驻留,而非运行时
# 1. 字符串的长度为0或者1时
str1 = ''
str2 = ""
print(id(str1)) # 2443258133728
print(id(str2)) # 2443258133728

str3 = '1'
str4 = '1'
print(id(str3)) # 2029518993704
print(id(str4)) # 2029518993704

# 2. 符合标识符的字符串【字母、数字、下标线】
str5 = '123456789abcv_'
str6 = '123456789abcv_'
print(id(str5)) # 2292665335344
print(id(str6)) # 2292665335344

str7 = '#@###1234556'
str8 = '#@###1234556' 
print(id(str7)) # 2067284476784
print(id(str8)) # 2067284476784

# 3. 字符串只在编译时进行驻留,而非运行时
#下面定义为编译时
str9 = 'abc'
str10 = 'abc'
str11 = 'a'+'bc'
print(id(str9)) # 2532776736504
print(id(str10)) # 2532776736504
print(id(str11)) # 2532776736504

#下面这种为运行时才计算
str12 = 'abc'
str13 = ''.join(['ab','c'])
print(str12) # abc
print(id(str12)) # 1752729188088
print(str13) # abc
print(id(str13)) # 1752729188088

**注意:**第二个,在python交互模式下变量的内存地址是不一样的,在编译器环境中【Pycharm】中是相同的。切记
在这里插入图片描述

字符串创建

''创建字符串

str1 = '123456'
print(str1) # 123456

str1 = "123456"
print(str1) # 123456

str1 = """123456
2222222222222222222
"""
print(str1)
# 123456
# 2222222222222222222

str1 = '''123456
2222222222222222222
33333333
'''
print(str1)
# 123456
# 2222222222222222222
# 33333333

str创建字符串

str1 = str(123456)
print(str1) # 123456
print(type(str1)) # <class 'str'>

创建空字符串

str1 = str()
print(str1)
print(type(str1)) # <class 'str'>

str2 = ''
print(str2)
print(type(str2)) #<class 'str'>

字符串查询

index()

index()–查找子串第一次出现的位置,不存在时会报错

str1 = 'hellohid'

print(str1.index('h')) # 0

print(str1.index('q')) # ValueError: substring not found

rindex()

rindex()–查找子串最后一次出现的位置,不存在时会报错

str1 = 'hellohid'

print(str1.rindex('h')) # 5

print(str1.rindex('q')) # ValueError: substring not found

find()

find()–查找子串第一次出现的位置,不存在时返回-1

str1 = 'hellohid'

print(str1.find('h')) # 0

print(str1.find('q')) # -1

rfind()

rfind()–查找子串最后一次出现的位置,不存在时返回-1

str1 = 'hellohid'

print(str1.rfind('h')) # 5

print(str1.rfind('q')) # -1

字符串大小写转换

upper()

upper()—把字符串转换成大写字母

str1 = 'hello world'
print(str1.upper()) # HELLO WORLD

lower()

lower()–把字符串中的字母转换成小写字母

str1 = 'HELLO WORLD'
print(str1.lower()) # hello world

swapcase()

swapcase()–把字符串中的大写转换成小写,小写转换成大写。

str1 = 'HELLO world'
print(str1.swapcase()) # hello WORLD

capitalize()

capitalize()–把字符串中第一个字符转换成大写,其他转换成小写。

str1 = 'HELLO WORLD'
print(str1.capitalize()) # Hello world

title()

title()–把字符串中单词的第一个字符转换成大写,其他转换成小写。

str1 = 'HELLO WORLD'
print(str1.title()) #Hello World

字符串内容对齐操作

center()居中对齐

str1 = 'HELLO WORLD'
print(str1.center(20),1) #    HELLO WORLD      1

print(str1.center(20,'*'))# ****HELLO WORLD*****

ljust()左对齐

str1 = 'HELLO WORLD'
print(str1.ljust(20),1) #HELLO WORLD          1
print(str1.ljust(20,"-"))#HELLO WORLD---------

rjust()右对齐

str1 = 'HELLO WORLD'
print(str1.rjust(20)) #         HELLO WORLD
print(str1.rjust(20,'+'))#+++++++++HELLO WORLD

zfill()

zfill()–右对齐,左边用0填充,该方法只接收一个参数,用语言指定字符串的宽度,字符串是负数,0填充在-1数之后。

str1 = 'HELLO WORLD'
print(str1.zfill(20)) # 000000000HELLO WORLD

str1 = '1234'
print(str1.zfill(10)) # 0000001234

str1 = '-123'
print(str1.zfill(10)) # -000000123

字符串劈分操作

split()

split()
–从左边开始劈分,默认的劈分字符是空格,返回值是一个列表。
–通过参数sep指定劈分字符串;
–通过参数maxsplit指定劈分字符时的最大劈分次数。

str1 = "hello world wo shi python"
str_pi = str1.split()
print(str_pi) # ['hello', 'world', 'wo', 'shi', 'python']
print(type(str_pi)) # <class 'list'>

str1 = "hello world wo shi python"
str_w = str1.split('w')
print(str_w) # ['hello ', 'orld ', 'o shi python']

str1 = "hello world wo shi python"
str_pi = str1.split(maxsplit=2)
print(str_pi) # ['hello', 'world', 'wo shi python']

rsplit()

rspilt()–从右边开始劈分,其他和split()一样。

str1 = "hello world wo shi python"
print(str1.rsplit()) # ['hello', 'world', 'wo', 'shi', 'python']
print(str1.rsplit(maxsplit=2)) #['hello world wo', 'shi', 'python']

判断字符串

isidentifier()判断标识符

isidentifier()–判断是合法标识字符串,满足变量命令规格的字符串返回True,否则返回Flase。

str1 = "str10_"
print(str1.isidentifier()) # True

str1 = "01234str"
print(str1.isidentifier()) # False

str1 = "str232#$"
print(str1.isidentifier()) # False

isspace()判断空白字符组成

isspace()–判断指定的字符串是否全部由空白字符组成(回车、换行、制表符)

str1 = '    s   \t'
print(str1.isspace()) # False

str1 = '\n \t'
print(str1.isspace()) # True

isalpha()判断由字母组成

isalpha()–判断指定的字符串是否全部由字母组成,中文也是。

str1 = 'abcdefgABCDEF'
print(str1.isalpha()) # True

str1 = 'abcd3rfgghh'
print(str1.isalpha()) # False

str1 = '中文'
print(str1.isalpha()) # True

isdecimal()判断十进制

isdecimal()–判断指定的字符串是否全部由十进制数字组成,只包含0-9。

str1 = '1234567890123'
print(str1.isdecimal()) # True

str1 = '0x1d'
print(str1.isdecimal()) # False

isnumeric()判断由数字(罗马数字)组成

isnumeric()–判断指定的字符串是否全部由数字组成,包含四、罗马数字。

str1 = '1234⑩④四'
print(str1.isnumeric()) # True

str1 = 'sghdg88888'
print(str1.isnumeric()) # False

isalnum()判断由数字和字母组成

isalnum()–判断指定的字符串是否由数字和字母组成。

str1 = '7777sssaaa'
print(str1.isalnum()) # True

str1 = 'shhsbsb&&&**'
print(str1.isalnum()) # False

字符串替换拼接

replace()字符串替换

replace()–字符串替换,第一个参数被替换的字串,第二个参数指定替换字串的字符串,第三个参数指定最大替换次数。

str1 = 'rehhrejrekrelrep'
print(str1.replace('re','uu')) # uuhhuujuukuuluup

str1 = 'rehhrejrekrelrep'
print(str1.replace('re','QQ',3)) # QQhhQQjQQkrelrep

join()字符串合并

join()–将列表或者元组的字符串合并成一个字符串。

str1 = ['1','2','3','4','5','6','7']
str3 = '*'.join(str1)
print(str3) # 1*2*3*4*5*6*7

str2 = ['a','b','c','d']
str4 = '-'.join(str1)
print(str4) # 1-2-3-4-5-6-7

字符串比较

字符串比较运算符:>、>=、<、<=、==、!=
比较规则:首先比较两个字符串的第一个字符,如果相等则比较下一个字符,依次比较下去,直到两个字符串中的字符不相等时,就返回比较结果。
比较原理:比较其的原始值(chr()、ord())

print(chr(97)) # a

print(ord('a')) # 97
print(ord('b')) # 98

str1 = 'hello a'
str2 = 'hello b'

print(str1 > str2) # False
print(str1 < str2) # True

注意:==比较的是值;is比较的是内存地址;

字符串切片操作

字符串是不可变类型,不具备增删改操作,切片操作将产生新的对象;

str1 = 'hello world,wo is xiaoming'

print(str1[12:]) # wo is xiaoming
print(str1[:11]) # hello world
print(str1[1:10:2]) # el ol

print(str1[1:-1:2]) # el ol,oi ioi
print(str1[-1:-5:-1]) # gnim

print(str1[:]) # hello world,wo is xiaoming
print(str1[::2]) # hlowrdw sxamn

print(str1[::-1]) # gnimoaix si ow,dlrow olleh

格式化字符串

%占位符

name = '小明'
age = 24

print('我的名字叫:%s,今年%d岁了' % (name,age)) # 我的名字叫:小明,今年24岁了

{}占位符

name = '小明'
age = 24

print('我的名字叫:{0},今年{1}岁了,我真的叫{0}'.format(name,age))
# 我的名字叫:小明,今年24岁了,我真的叫小明

f:string

name = '小明'
age = 24
 
print(f'我的名字叫:{name},今年{age}岁了') # 我的名字叫:小明,今年24岁了

注意:%d–整数、%10d–10宽度、%f–小数、%.3f–小数后3位、{0:.3f}–小数后3位。

字符串的编码转换

为什么需要字符串的编码转换?
A计算机【str在内存中以Unicode表示】----编码—>byte字节传输----解码—>B计算机显示

编码与解码方式:编码【字符串–>二进制】、解码【二进制-字符串】

s = '天涯共此时'

print(s.encode(encoding='GBK')) #GBK  中文占2个字节
# b'\xcc\xec\xd1\xc4\xb9\xb2\xb4\xcb\xca\xb1'

print(s.encode(encoding='UTF-8')) # UTF-8 中文占3个字节
# b'\xe5\xa4\xa9\xe6\xb6\xaf\xe5\x85\xb1\xe6\xad\xa4\xe6\x97\xb6'

byte_z = s.encode(encoding='gbk')
print(byte_z.decode(encoding='gbk')) # 天涯共此时

注意:编码和解码不一样会报错。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值