【Python】第八部分 字符串

导读:本篇文章讲解 【Python】第八部分 字符串,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

【Python】第八部分 字符串



8. 字符串

8.1 字符串的创建和驻留机制

  Python的驻留机制: 对于相同的字符串只会拷贝一份,后续创建相同的字符串时,不会开辟新的空间,而是把该字符串的地址赋给新创建的变量.

  驻留机制的优缺点当需要相同的字符串的时候,可以直接从字符池里拿来使用,避免了频繁的创建和销毁,提升效率和节约内存空间,所以修改字符串或者是
拼接字符串是比较影响性能的在需要进行字符串拼接时
建议str中的join方法**,因为join()会先去计算字符串总的长度,然后在进行拷贝,只创建一次对象,效率比 + 好.

8.2 字符串的查询操作

  1. index() 查找该字符串在字符串中第一次出现的位置,如果找不到则报错
  2. rindex() 查找该字符串在字符串中最后一次出现的位置,如果找不到则报错
  3. find() 查找该字符串在字符串中第一次出现的位置,如果找不到则返回-1
  4. rfind() 查找该字符串在字符串中最后一次出现的位置,如果找不到则返回-1
# 1.index()
# 查找该字符串在字符串中第一次出现的位置,如果找不到则报错
str1 = 'hello world'
print(str1.index('l'))  # 2

# 2.rindex()
# 查找该字符串在字符串中最后一次出现的位置,如果找不到则报错
print(str1.rindex('l'))  # 9

# 3.find()
# 查找该字符串在字符串中第一次出现的位置,如果找不到则返回-1
print(str1.find('l'))  # 2

# 4.rfind()
# 查找该字符串在字符串中最后一次出现的位置,如果找不到则返回-1
print(str1.rfind('l'))  # 9

8.3 字符串的大小写转换操作

  1. upper() 大写
  2. lower() 小写
  3. swapcase() 大小写互相转换
  4. capitalize() 第一个字符为大写,其他都为小写
  5. title() 每个单词的首字符都变大写,其他的都是小写
str2 = 'hello world'
# 1. upper() 把字符串中的所有字符都转换为大写
print(str2.upper())

# 2. lower() 把字符串中的所有字符都转换为小写
print(str2.lower())

# 3. swapcase()  把字符串中的大写变小写,小写变大写
print(str2.swapcase())

# 4. capitalize()  第一个字符为大写,其他都为小写
print(str2.capitalize())

# 5. title() 把每个单词的首字符都变大写,其他的都是小写
print(str2.title())

# 以上的方法都会创建一个新的字符串对象,不会对原字符进行修改
print(str2)  # hello world

8.4 字符串的内容对齐操作

# 1.center()
# 居中对齐,可以传两个参数,第一个参数是指定宽度,第二个参数是指定填充符,第二个参数可选,默认为空格
# 会创建一个新的字符串对象,不会对原字符进行修改
# 如果设置的宽度小于原来的宽度则返回原字符串
str3 = 'hello world!'
print(str3.center(24, '*'))  # ******hello world!******


# 2.ljust()
# 左对齐,可以传两个参数,第一个参数是指定宽度,第二个参数是指定填充符,第二个参数可选,默认为空格
# 会创建一个新的字符串对象,不会对原字符进行修改
# 如果设置的宽度小于原来的宽度则返回原字符串
print(str3.ljust(20, '*'))  # hello world!********


# 3.rjust()
# 右对齐,可以传两个参数,第一个参数是指定宽度,第二个参数是指定填充符,第二个参数可选,默认为空格
# 会创建一个新的字符串对象,不会对原字符进行修改
# 如果设置的宽度小于原来的宽度则返回原字符串
print(str3.rjust(20, '*'))  # ********hello world!


# 4.zfill()
# 右对齐,只传一个参数,该参数指定宽度,左边会用0进行填充
# 会创建一个新的字符串对象,不会对原字符进行修改
# 如果设置的宽度小于原来的宽度则返回原字符串
print(str3.zfill(20))  # 00000000hello world!

8.5 字符串的劈分(拆分)操作

  1. split() 从左边开始拆分,默认以空格进行拆分
  2. rsplit() 从右边开始拆分,默认以空格进行拆分
# 1. split()
# 从左边开始拆分,默认以空格进行拆分
# 可以通过sep参数指定分隔符,maxsplit指定最大分隔次数,分隔后返回的是列表
str4 = 'hello world hello python'
print(str4.split(), type(str4.split()))

str5 = 'hello|world|hello|python'
print(str5.split(sep='|', maxsplit=2), type(str5.split(sep='|')))

# 2. rsplit()
# 从右边开始拆分,默认以空格进行拆分
# 可以通过sep参数指定分隔符,maxsplit指定最大分隔次数,分隔后返回的是列表
str4 = 'hello world hello python'
print(str4.rsplit(), type(str4.rsplit()))

str5 = 'hello|world|hello|python'
print(str5.rsplit(sep='|', maxsplit=2), type(str5.rsplit(sep='|')))

8.6 字符串判断的相关操作

  1. isidentifier() 判断字符串是否是合法的标识符
  2. isspace() 判断字符串是否全部都是由空白符组成(水平制表符,换行,回车)
  3. isalpha() 判断字符串是否全部都是由字母组成
  4. isdecimal() 判断字符串是否全部都是由十进制组成
  5. isnumeric() 判断字符串是否全部都是由数字组成
  6. isalnum() 判断字符串是否全部都是由数字和字母组成
# 1. isidentifier() 判断字符串是否是合法的标识符
str6 = "hello"
print(str6.isidentifier())  # True

# 2. isspace()  判断字符串是否全部都是由空白符组成(水平制表符,换行,回车)
print(str6.isspace())  # Fasle

# 3. isalpha() 判断字符串是否全部都是由字母组成
print((str6.isalpha()))  # True

# 4. isdecimal()  判断字符串是否全部都是由十进制组成
print(str6.isdecimal())  # False

# 5. isnumeric()  判断字符串是否全部都是由数字组成
print(str6.isnumeric())  # False

# 6. isalnum()  判断字符串是否全部都是由数字和字母组成
print(str6.isalnum())  # True

8.7 字符串替换和合并操作

# 1. 替换 replace()
# 第一个参数为要被替换的字符串,第二个为替换的字符串,第三个参数用来指定最大的替换次数
str7 = 'hello world'
print(str7.replace('hello', 'hi'))

# 2. 合并  字符.join()
# 将列表或者是元组合并成一个字符串
str8 = ['hello', 'world', 'hhh']
print('|'.join(str8))  # hello|world|hhh

str9 = ('hello', 'python', 'hi')
print(' '.join(str9))  # hello python hi

print('-'.join('python'))  # p-y-t-h-o-n

8.8 字符串比较操作

比较的规则:首先比较两个字符串中的第一个字符,如果相等则继续向后面进行比较
直到不相等,则后续的字符不再进行比较.

比较的原理:两个字符在进行比较的时候,比较的其实是ordinal value(原始值)
可以调用内置函数ord()得到指定字符的ordinal value。内置函数ord()对应的内置
函数chr(),是它的逆操作,通过ordinal value可以得到对应的字符.

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

a = 'Python'
b = 'Python'
print(a == b)  # 比较的value
print(a is b)  # 比较的是id

# 字符串切片操作
# 和之前的切片是一样的
str10 = 'hello,world!'
# 默认是从0开始,步长为1
print(str10[:5:])  # hello
print(str10[6::])  # world!

str11 = str10[:5:]
str12 = str10[6::]
str13 = str11 + '-' + str12
print(str13)  # hello-world!

8.9 格式化字符串

# 1. % 占位符写法
# %i或者%d : 整型的占位符
# %f : 浮点型
# %s : 字符串

name = 'Jack'
age = 18
print('我叫%s,今年%d岁!' % (name, age)) # 我叫Jack,今年18岁!
print('%d' % 99)  # 99
print('%10f' % 3.1415926)  # 10表示的是宽度
print('%.3f' % 3.1415926)  # 保留小数点后3位
print('%10.3f' % 3.1415926)


# 2. {} 占位符写法
# {}里的0和1表示的是索引
print('我叫{0},今年{1}岁!'.format(name, age))  # 我叫Jack,今年18岁!
print('我叫{1},今年{0}岁!'.format(name, age))  # 我叫18,今年Jack岁!

print('{0:.3f}'.format(3.1415926))  # 保留小数点后3位
print('{0:10f}'.format(3.1415926))  # 10表示的是宽度
print('{0:10.3f}'.format(3.1415926))

# 3. f-string写法
print(f'我叫{name},今年{age}岁!')  # 我叫Jack,今年18岁!


# 字符串的编码和解码
# 编码:把字符串转换为二进制的数据 (encode)
# 解码:把二进制的数据转换为字符串类型 (decode)
str14 = '海上生明月'
byte = str14.encode(encoding='UTF-8')
print(byte)  # b'\xe6\xb5\xb7\xe4\xb8\x8a\xe7\x94\x9f\xe6\x98\x8e\xe6\x9c\x88'
print(byte.decode(encoding='UTF-8'))  # 海上生明月


总结

以上就是今天要讲的内容,希望对大家有所帮助!!!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/82893.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!