Python学习笔记7_字符串相关知识

一、同一运算符

       同一运算符用于比较两个对象的存储单元,实际比较的是对象的地址。

运算符描述
isis是判断两个标识符是不是引用同一个对象
is notis not是判断两个标识符是不是引用不同对象

is 与 == 区别:

1.  is 用于判断两个变量引用对象是否是同一个,即比较对象的地址。
2.  == 用于判断引用变量引用对象的值是否相等,默认调用对象的 __eq__()方法。

整数缓存问题:
       Python仅仅对比较小的整数对象进行缓存(范围在[ -5 , 256 ]),而非是所有整数对象。需要注意的是,这仅仅是在命令行中执行。在Pycharm或者保存为文件执行,结果是不一样的,这是因为解释器做了一些优化(范围是[ -5 , 任意正整数 ])。
       说是这么说的,但是我在用Pycharm测试的时候发现,不管怎么测,即使超过了整数缓冲池的大小,仍然返回结果为True。使用的python版本是3.10.0的,Pycharm是2021.2.3。

#测试整数缓存问题
a = -5
b = -5
print(a is b)  #输出True
a = -6
b = -6
print(a is b)  #输出True

a = -100000000
b = -100000000
print(a is b)  #输出True

a = 256
b = 256
print(a is b)  #输出True

a = 100000000
b = 100000000
print(a is b)  #输出True

       但用Python自带的Idea测试,这话没毛病,可能是Pycharm做了优化吧。

Python 3.10.0 (tags/v3.10.0:b494f59, Oct  4 2021, 19:00:18) [MSC v.1929 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> a = -5
>>> b = -5
>>> a is b
True
>>> a = -6
>>> b = -6
>>> a is b
False
>>> a = 256
>>> b = 256
>>> a is b
True
>>> a = 257
>>> b = 257
>>> a is b
False

二、字符串

① 定义

       字符串的本质:字符序列。python的字符串是 不可变 的,无法对原字符做任何修改。可以将字符串的一部分复制到新创建的字符串,达到“ 看起来修改 ”的效果。◎●机智●◎
       Python不支持单字符类型,单字符也是作为一个字符串使用。

② 字符串的编码

       Python3直接支持Unicode,可以表示世界上任何书面语言的字符。Python3的字符默认是16位Unicode编码,ASCII码是Unicode编码的子集。
       使用 内置函数 ord() 可以把字符串转成对应的Unicode码;
       使用 内置函数 chr() 可以把十进制数字转换成对应的字符。

③ 创建字符串

       我们可以通过单引号或双引号创建字符串。两者配合使用,效果更加。

#创建字符串测试
a = "han han yuan"
print(a)  #输出:han han yuan
b = '憨憨缘'
print(b)  #输出:憨憨缘
c = "I‘m  憨憨缘"
print(c)   #输出:I'm  憨憨缘
d = 'I\'m  憨憨缘'
print(d)  #输出:I'm  憨憨缘

       我们还可以使用连续的三个 单引号 或 双引号,可以帮助我们创建多行字符串。

str = '''name:"憨憨缘" age:"22" have girlfriend:"yes" '''
print(str)  #输出:name:"憨憨缘" age:"22" have girlfriend:"yes" 

④ 空字符串与 len() 函数

       Python允许 空字符串 存在,不包含任何字符且长度为0。
       len() 函数 用于计算字符串包含多少字符。

#空字符串 len()函数 的测试
a = ""
print(len(a))  #输出:0
name = "憨憨缘"
print(len(name))  #输出:3

⑤ 转义字符

       我们可以使用“\ + 特殊字符”,实现某些难以用字符表示的效果。比如:换行等。常见的转义字符如下:

转义字符描述
\(在行尾时)续行符
\\反斜杠符号
\’单引号
\ "双引号
\b退格(Backspace)
\n换行
\t横向制表符
\r回车

⑥ 从控制台读取字符串

       可以使用 input() 从控制台读取键盘输入的内容。

#测试控制台输入显示
#写法一
print("请输入:",end="")  # end="" 作用:控制 打印不换行
a = input()  #输入:憨憨缘
print(a + ",你好")   #输出:憨憨缘,你好

#写法二
print(input("请输入:") + ",你好")   #①显示:请输入: ②输入:憨憨缘   ③输出:憨憨缘,你好

⑦ str() 实现数字转型字符串

       str() 函数可以将其他类型数据转换成字符串。

# 其他类型 转 字符串 输出 测试
a = 125
b = str(a)
print("a'type:", type(a), "\nb'type:", type(b), b)
# 输出
# a'type: <class 'int'>
# b'type: <class 'str'> 125

c = 56.12
d = str(c)
print("c'type:", type(c), "\nd'type:", type(d), d)
# 输出
# c'type: <class 'float'>
# d'type: <class 'str'> 56.12

e = 1.26e2
f = str(e)
print("e'type:", type(e), "\nf'type:", type(f), f)
# 输出
# e'type: <class 'float'> 
# f'type: <class 'str'> 126.0

⑧ 使用[ ]提取字符

       字符串的本质就是字符序列

a = "abcdefghijklmnopqrstuvwxyz"
print(a[0],a[25])  #输出:a z

⑨ replace() 实现字符串替换

       使用replace()函数时,实际上只是创建了新的字符串对象,并指向它,原对象并未改变。在Python中,字符串是不可被改变的。

# replace()函数的使用
a = "abcdefghijklmnopqrstuvwxyz"
print(a.replace("b","憨"))   # 输出:a憨cdefghijklmnopqrstuvwxyz
print(a)  # 输出:abcdefghijklmnopqrstuvwxyz
b = a.replace("b","憨")
print(b) # 输出:a憨cdefghijklmnopqrstuvwxyz
print(b is a.replace("b","憨"))  # 输出:False
print(b == a.replace("b","憨"))  # 输出:True

print(id(a)) # 输出:2011065801328
print(id(a.replace("b","憨"))) # 输出:2011065903280
print(id(b)) # 输出:2011065902384

注:可以发现,b 和 a.replace(“b”,“憨”)不是同一个对象。a.replace(“b”,“憨”)其实是一个临时地址,暂存数据用的。

⑩ 字符串切片 slice 操作

       切片 slice 可以快速提取字符串。标准格式为:
       
[起始偏移量 start : 终止偏移量 end : 步长 step]

三个量均为正数时        a = “abcdefghijklmnopqrstuvwxyz”
操作和说明示例结果
[:] 提取整个字符串a[:]abcdefghijklmnopqrstuvwxyz
[start:] 从start索引开始到结尾a[2:]cdefghijklmnopqrstuvwxyz
[:end] 从头开始到end-1a[:2]ab
[start:end] 从start到end-1(a[1:2]b
[start: end: step]a[1:5:2]bd
# slice函数的使用
a = "abcdefghijklmnopqrstuvwxyz"
print(a[:]) # 输出:abcdefghijklmnopqrstuvwxyz
print(a[2:]) # 输出:cdefghijklmnopqrstuvwxyz
print(a[:2]) # 输出:ab
print(a[1:2]) # 输出:b
print(a[1:5:2]) # 输出:bd
三个量为负数时        a = “abcdefghijklmnopqrstuvwxyz”
操作和说明示例结果
[-start:] 倒数的第start开始到结尾a[-3:]xyz
[-start:-end] 从倒数的第start索引开始到倒数的第end位a[-8:-3]stuvw
[::-step] 步长为负,从右到左提取a[::-1]zyxwvutsrqponmlkjihgfedcba
a = "abcdefghijklmnopqrstuvwxyz"
print(a[-3:])  # 输出:xyz
print(a[-8:-3])  # 输出:stuvw
print(a[::-1])  # 输出:zyxwvutsrqponmlkjihgfedcba

⑪ split() 分割和 join() 合并

       split() 可以基于指定分隔符将字符串 分隔成 多个子字符串(储存到列表中)。如果不指定分隔符,则默认使用空白字符(换行符/空格/制表符)。
       join() 的作用和 split() 作用相反,用于将一系列子字符串 连接 起来。

# split()函数 与 join()函数 的使用
a = "I love you"
print(a.split())  # 输出:['I', 'love', 'you']

b = a.split()
print(b[0],b[1],b[2])  # 输出:I love you
print(b) # 输出:['I', 'love', 'you']

c = ''
print(c.join(b))  # 输出:Iloveyou
# 也可以写成这样
# print(''.join(b))

d = ' '
print(d.join(b))  # 输出:I love you
# 也可以写成这样
# print(' '.join(b))

e = '\n'
print(e.join(b))  
# 也可以写成这样
# print('\n'.join(b))
# 输出:
# I
# love
# you

str = "to be not to be"
print(str.split('to'))   # 输出:['', ' be not ', ' be']

       使用字符串拼接符+,会生成新的字符串对象,因此不推荐使用+来拼接字符串。推荐使用join()函数,因为jion()函数在拼接字符串之前会计算所有字符串的长度,然后逐一拷贝,仅新建一次对象。

# 测试 使用字符串拼接符+ 与 使用join()函数 运行时间对比
import time

time_start1 = time.time()
a = ""
for i in range(1000000):
    a += "hanhanyuan"

time_end1 = time.time()
print("运行时间:" + str(time_end1 - time_start1))   
# 输出:运行时间:3.7516746520996094

time_start2 = time.time()
arr = []
for i in range(1000000):
    arr.append("hanhanyuan")
str1 = "".join(arr)
time_end2 = time.time()
print("运行时间:" + str(time_end2 - time_start2))   
# 输出:运行时间:0.12798738479614258
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值