python学习笔记_第3天(字符串)

字符串

字符串的编码

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

ord('湛')  # 28251
ord('B')  # 66
chr(38472)  # 陈
chr(73)  # I
创建字符串

通过单引号或双引号创建字符串,如a=’abc’; b=”123”.当字符串本身包含单引号或双引号之一时,可用另者创建,不报错.
连续三个单引号或三个双引号,可以创建多行字符串.
Python 允许空字符串的存在,不包含任何字符且长度为0.

转义字符

使用“\+特殊字符”,实现某些难以用字符表示的效果。常见的转义字符有这些:

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

调用print 函数时,其后自动跟一个换行符,相当于end = “\n”.我们可以通过改变参数end = “任意字符串”来实现末尾添加指定内容

print("123",end='*')
print("abc",end='\n')
print("321",end='#')
字符的运算
  1. 使用+将多个字符串拼接起来,也可以将多个字符串直接放到一起实现拼接
  2. 使用*可以实现字符串复制
字符串提取字符

字符串的本质就是字符序列,所以可以通过在字符串后添加[],在[]里面指定偏移量,来提取该位置的单个字符,可正向提取亦可反向提取

  1. 正向搜索:
    最左侧第一个字符,偏移量是0,第二个偏移量是1,以此类推,直到len(str)-1为止.
  2. 反向搜索:
    最右侧第一个字符,偏移量是-1,倒数第二个偏移量是-2,以此类推,直到-len(str)为止。
a = 'abcdefghijklmnopqrstuvwxyz'
a[0]  # 'a'
a[3]  # 'd'
a[26-1]  # 'z'
a[-1]  # 'z'
a[-26]  # 'a'
字符串切片

切片操作可快速的提取子字符串,标准格式为[起始偏移量start:终止偏移量end(包头不包尾):步长step]

  1. 正向
操作与说明示例结果
[:] 提取整个字符串“abcdef”[:]“abcdef”
[start:] 从start 索引开始到结尾“abcdef”[2:]“cdef”
[:end] 从头开始知道end-1“abcdef”[:2]“ab”
[start:end]从start 到end-1“abcdef”[2:4]“cd”
[start: end:step]从start 提取到end-1,步长为step“abcdef”[1:5:2]“bd”
  1. 反向
操作与说明示例结果
[-n:]倒数n个数“abcdef”[-3:]“def”
[-x:-y] 倒数第x个到倒数第y个(包头不包尾)“abcdef”[-5:-3]“bc”
[::-1]步长为负,从右到左反向提取“abcdef”[::-1]“fedcba”

注: 切片操作时,起始偏移量和终止偏移量不在[0,字符串长度-1]的范围内,也不会报错.此时起始偏移量小于0则会当做0,终止偏移量大于“长度-1”会被当成-1。

字符串驻留机制和比较

字符串驻留–仅保存一份相同且不可变字符串的方法,不同的值被存放在字符串驻留池中
Python 支持字符串驻留机制,对于符合标识符规则的字符串,即仅包含下划线,字母,数字的字符串会启用字符串驻留机制

a = "abc_123"
b = "abc_123"
a is b  # True,启用字符串驻留机制,不新增对象
a == b  #  True

c = "学习"
d = "学习"
c is d  #  False,不符合符合标识符规则,新建等值对象
c == d  # True,俩对象指向id不同,值相同
id(c)  # 86558128
id(d)  # 86558216

e = "aa"
f = "bb"
e + f is "aabb"  # False
e + f == "aabb"  # True

==,!=对字符串进行值的比较
s / not is,判断两个对象是否同一个对象,即地址是否相等

"ab" in a  # True
"cd" in a  # False
"cd" not in a  # True

in /not in关键字,判断某个字符(子字符串)是否存在于字符串中

字符串相关函数
  1. str()将非字符串的对象转成了字符串
  2. len()用于计算字符串含有多少字符
len("learning 学习")  # 11,Unicode编码里,汉子与字母都算1个字符
  1. input()读取键盘输入的内容
words = input ("请输入:")  # 输入 study
print(words)  # "study"
  1. replace()实现字符串替换(Python 的字符串不可变,即无法对原字符串做任何修改.但可以创建一个符合要求的新字符串,达到“修改”的效果.)
a = 'abcdefghijklmnopqrstuvwxyz'
b = a.replace('c','高')
print(a,b)  # 'abcdefghijklmnopqrstuvwxyz' 'ab高defghijklmnopqrstuvwxyz'
  1. str.split(“指定分隔符”)用指定分隔符,将字符串分隔成多个子字符串(存储到列表中).若不指定分隔符,则默认使用空白字符(换行符/空格/制表符).
a = "to be or not to be"
print(a.split())  # ['to', 'be', 'or', 'not', 'to', 'be']
print(a.split('be'))  # ['to ', ' or not to ', '']
  1. “指定链接符” .join()用指定链接符,将一系列子字符串连接起来
a = ['I','can','do','best']
print('*'.join(a))  # I*can*do*best
print(''.join(a))   # Icandobest

使用+拼接多个字符,会生成多个新字符串对象;使用join函数,仅新建一个对象.所以在项目代码中"" .join()效率更高.

import time

time_start1 = time.time()  # 循环起始时间
a = ""
for i in range(1000000):
    a += "python"  # 字符串不可变,循环中每进行一次运算,形成一个新对象
time_end1 = time.time()  # 循环终止时间
print("循环时长:" + str(time_end1 - time_start1))  # 2.315716

time_start2 = time.time()
b = []
for i in range(1000000):
    b.append("python")  # 列表可变,只形成一个对象
b = "".join(b)
time_end2 = time.time()  # 循环终止时间
print("循环时长:" + str(time_end2 - time_start2))  # 0.137120
  1. 字符串查找
函数说明
str. startswith(’’)判断是否以指定字符串开头
str.endswith(’’)判断是否以指定字符串结尾
str.find(’’)返回第一次出现指定字符串的位置
str.rfind(’’)返回最后一次出现指定字符串的位置
str.count(’’)返回指定字符串出现次数
str.salnum()判断字符串是否只由字母(Unicode编码中汉字也算字母)或数字组成
str.isalpha()判断字符串是否只由字母组成
str.isdigit()判断字符串是否只由数字组成
str.isspace()判断是否为空白符,常见空白符为空格,制表符,换行符
str.isupper()判断是否为大写字母
str.islower()判断是否为小写字母
" I'm learning python, python is interesting".startswith("i'm")  # False
" I'm learning python, python is interesting".endswith('ing')  # True
" I'm learning python, python is interesting".find('python')  # 14
" I'm learning python, python is interesting".rfind('python')  # 22
" I'm learning python, python is interesting".count('n')	  # 6
"学python3".isalnum()  # True
"学python".isalpha()  # True
"123.4".isdigit()  # False
"\t".isspace() # True
"Ab". isupper()  # False
"ab". islower()  # True
  1. 大小写转换
函数说明
str.capitalize()产生新的字符串,句子首字母大写
str.title()产生新的字符串,每个单词都首字母大写
str.upper()产生新的字符串,所有字符全转成大写
str.lower()产生新的字符串,所有字符全转成小写
str.swapcase()产生新的,所有字母大小写转换
long = "I'm learning PYTHON, python is interesting"
print(long.capitalize())  # I'm learning python, python is interesting
print(long.title())  # I'M Learning Python, Python Is Interesting
print(long.upper())  # I'M LEARNING PYTHON, PYTHON IS INTERESTING
print(long.lower())  # i'm learning python, python is interesting
print(long.swapcase())  # i'M LEARNING python, PYTHON IS INTERESTING
  1. 格式排版
函数说明
center(字符串长度,‘占位符’)字符串居中,剩余位置用指定占位符补齐
ljust(字符串长度,‘占位字符’)字符串左对齐,剩余位置用指定占位符补齐
rjust(字符串长度,‘占位字符’)字符串右对齐,剩余位置用指定占位符补齐
str.strip(’’)去除字符串首尾指定信息
str.lstrip(’’)去除字符串左边指定信息
str.rstrip(’’)去除字符串右边指定信息
txt = "-python-" 
print(txt.center(10,"*"))  # *-python-*
print(txt.center(20))  #       -python-      
print(txt.ljust(10,"*"))  # -python-**
print(txt.rjust(10,"*"))  # **-python-
print(txt.strip("-"))  # python
print(txt.lstrip("-"))  # python-
print(txt.rstrip("-"))  # -python
字符串的格式化
  • str.format({索引}/{参数名})

str.format() 函数中字符串用{}占位,format内参数可按{}内索引顺序填入,也可按{}内参数名乱序填入, 可接受不限个参数.

txt1 = "{0}学习{1},{1}是有趣的"
print(txt1.format("abc","python"))  # abc学习python,python是有趣的
txt2= "{name}学习{subject},{subject}是有趣的"
print(txt2.format(subject = "python",name = "123"))  # 123学习python,python是有趣的
  • 填充与对齐
    冒号":"后面带一个填充字符,不指定时默认用空格填充
    ^–居中,<–左对齐(文字默认),>–右对齐(数字默认)
a = "{0:*^6}学习{1:->10},学习{2:5}天,{1:10}是有趣的"
print(a.format("ABC","python",3))  # *ABC**学习----python,学习    3天,python    是有趣的
  • 数字格式化
格式说明
{:.2f}四舍五入,保留小数点后两位
{:.0f}不带小数
{:0>4d}四位数字,不足左边补零
{:,}以千分位符分隔
{:.2%}保留两位小数的百分比
{:.2e}科学计数法
{:<10d}左对齐(宽度为10),数字默认右对齐
"{:.3f}".format(-3.1415926)  #  '-3.142'
"{:.0f}".format(-3.1415926)  #  '-3'
"{:0>4d}".format(6)  # '0006'
"{:,}".format(10000000)  # '10,000,000'
"{:.2%}".format(0.52432)  # '52.43%'
"{:.2e}".format(100000)  # '1.00e+05'
"{:<10f}".format(3.1415)  # '3.141500  '
可变字符串

Python 中字符串属于不可变对象,不支持直接修改,而是创建新的字符串对象,达成修改的效果.
当需要直接修改其中的值时,可以使用io.StringIO(str)或array 模块。

import io # 导入 io 模块
s = "hello,world"
sio = io.StringIO(s)  # 可变字符串
print(type(sio))  # <class '_io.StringIO'>
print(sio.getvalue()) # 获取对象值,hello,world
sio.seek(6) # 索引定位到字符串第7位
sio.write("W")  # 更改索引指定处字符,hello,World
print(sio.getvalue())
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值