Python学习之【字符串】

学习内容:

  • Python学习之【字符串】

学习时间:

  • 2022/6/14 下午10:52

学习产出:

字符串为不可变序列

一、字符串驻留机制:

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

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

1). 字符串的长度为0或1时

  	str1 = ''
    str2 = ''
    str3 = ''
    str4 = ''
    print(str1 is str2, str3 is str4) #True True

2). 符合标识符的字符串(数字、字母、下划线)

  	str1 = 'abc%'
    str2 = 'abc%'
    print(str1 is str2) #False

3). 字符串只在编译时进行驻留,而非运行时

	a = 'abc'
	b = 'ab' + 'c'
	c = ''.join('abc')
	print(a is b) #True
	print(a is c) #False

4). [-5, 256]之间的整数数字

	str1 = -5
	str2 = -5
	print(str1 is str2) #True
	str3 = -66
	str4 = -66
	print(str3 is str4) #False

2.sys中的intern()强制两个字符串指向同一个对象

str1 = 'abc%'
str2 = 'abc%'
print(str1 id str2) #False
import sys
str1 = sys.intern(str2)
print(str1 is str2) #True

PyCharm对字符串进行了优化处理

str1 = 'abc%'
str2 = 'abc%'
print(str1 is str2) #True

3.字符串驻留的优缺点

1.当需要值相同的字符串时,可以直接从字符串池中拿来使用,避免频繁的创建和销毁,提升效率和节约内存,因此拼接字符串和修改字符串是会比较影响性能的。
2.在需要进行字符串拼接时,建议使用str类型的join方法,而非+,因为join()是先计算出所有字符串中的长度,然后再拷贝,只new一次对象,效率比+高。

二、常用方法

1.查询

index:查找子串substr第一次出现的位置,如果查找的字串不存在,抛异常ValueError ;
rindex:查找字串substr最后一次出现的位置,如果查找的字串不存在,抛异常ValueError ;
find:查找子串substr第一次出现的位置,如果查找的字串不存在,返回-1 ;
rfind:查找子串substr最后一次出现的位置,如果查找的字串不存在,返回-1;

2.大小写,创建新对象

upper:全大写 ;
lower:全小写 ;
swapcase:所有大写转小写,所有小写转大写;
capitalize:第一个字符转大写,其余所有转小写;
title:每个单词的第一个字符为大写,每个单词剩余字母转为小写;

3.内容对齐

center:居中对齐,第一个参数指定宽度,第二个参数指定填充符(可选),默认是空格,如果指定宽度小于等于实际宽度则返回原字符串;
ljust:左对齐,第一个参数指定宽度,第二个参数指定填充符(可选),默认是空格,如果指定宽度小于等于实际宽度则返回原字符串;
rjust:右对齐,第一个参数指定宽度,第二个参数指定填充符(可选),默认是空格,如果指定宽度小于等于实际宽度则返回原字符串;
zfill:右对齐,左边用0填充,只接受一个参数来指定字符串宽度,如果指定宽度小于等于字符串长度,则返回字符串本身;

4.劈分操作

split:从字符串左边开始劈分,默认劈分字符是空格,返回值是列表;参数step指定劈分符;通过参数maxsplit指定最大劈分次数,剩余字串单独作为一部分。
rsplit:从字符串右边开始劈分,默认劈分字符是空格,返回值是列表;参数step指定劈分符;通过参数maxsplit指定最大劈分次数,剩余字串单独作为一部分。

5.判断

isidentifier:判断指定的字符串是不是合法的标识符;
isspace:判断指定的字符串否是全部由空白字符组成(回车、换行、水平制表符);
isalpha:判断指定的字符串是否全部由字母组成;
isdecimal:判断指定的字符串是否全部由十进制数字组成;
isnumeric:判断指定的字符串是否全部由数字组成;
isalnum:判断指定的字符串是否全部由数字和字母组成;

6.其他方法

replace:替换。第一个参数指定被替换的子串,第二个参数指定替换后子串,第三个参数指定最大替换次数;
join:合并。将列表或元组中的字符串合并成一个字符串

三、字符串的比较操作

运算符: >, >=, <, <=, ==, !=
1.比较规则:

首先比较两个字符串中的第一个字符,如果相等则继续比较下一个字符, 依次比较下去,直到两个字符串中的字符不相等时,其比较结果就是两个字符串的比较结果,后续字符将不再被比较

2.比较原理:

两个字符比较时,比较的是原始值ordinal value,内置函数ord()可以得到指定字符的原始值;chr()函数可以得到原始值对应的字符。

3.is和 == 的区别:

is比较的是id;
==比较的是value

四、字符串的切片操作

[start : end : step]
切片会产生新的对象

五、格式化字符串

1.% 占位符:

%d 整数;
%s 文字

name = '小明'
age = 18
print('我的名字叫%s, 今年%d岁' % (name, age))

宽度为10位:

print('%10d' % 99) #        99
print('0123456789')

保留3位小数:

print('%.3f' % 3.1415926) #3.142

同时表示宽度和精度:

print('%10.3f' % 3.1415926) #     3.142

2. {}占位符 下标只有一个时可以不写

print('我叫{0}, 今年{1}岁'.format(name, age))

保留3位数字:

print('{0:.3}'.format(3.1415926)) #3.14

保留3位小数:

print('{:.3f}'.format(3.1415926)) #3.142

同时表示宽度和精度:

print('{:10.3f}'.format(3.1415926)) #     3.142

3.f-string占位符

print(f'我叫{name}, 今年{age}岁')

六、字符串编码与解码

s = '天涯共此时'
编码

GBK编码格式中,一个中文占两个字节:

byte_g = s.encode(encoding='GBK') #b'\xcc\xec\xd1\xc4\xb9\xb2\xb4\xcb\xca\xb1'
print(byte_g)

UTF-8编码格式中,一个中文占三个字节:

byte_u = s.encode(encoding='UTF-8') #b'\xe5\xa4\xa9\xe6\xb6\xaf\xe5\x85\xb1\xe6\xad\xa4\xe6\x97\xb6'
print(byte_u)
解码
byte = byte_g.decode(encoding="GBK")
print(byte)
byte = byte_u.decode(encoding="UTF-8")
print(byte)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值