第五篇 字符串类型的内置方法

第五篇 字符串类型内置方法

#string

1 用途

  • 描述性质的数据类型,比如人的名字、性别、爱好

2 如何去定义一个字符串类型

  • 使用''、""、''''''、""""""包裹的的一串字符
  • u'unicode': unicode编码的字符串
  • b'101': 二进制编码的字符串
  • r'\n': 原生字符串,也就是说'\n'这是普通的两个字符,并没有换行的意思

3 常用操作和内置方法

  • 按索引取值(只可取值不可改变)
msg = 'hello king'
#      0123456789       #索引序号
print(f'{msg[6]}')
print(f'{msg[-2]}')
#结果是 k 
#      n
  • 切片(顾头不顾尾)
msg = 'hello king'
#      0123456789        #索引序号
print(f'{msg[3:]}')   #切片从序号3一直截取到最后一位,默认步长为1
print(f'{msg[2:7]}')   #切片从序号2一直截取到序号6,默认步长为1
print(f'{msg[2:7:2]}')   #切片从序号2截取到序号6,步长为2
print(f'{msg[2::2]}')  #切片从序号2一直截取到最后一位,步长为2
#结果是:lo king
#       llo k
#       lok
#       lokn
'''从上面的输出结果可以看出,切片就是截取一段字符串,当我们不输入步长时,它的默认步长为1,索引每次走一步,然后就截取出来,当我们输入步长之后,索引就需要走相应的步数然后停下来,将当前指向的序号上的字符截取下来,并有序组合在一起之后3打印出来(也就是不需要空出原有字符位置上的格子)'''

#注意:步长也可以为负,当步长为负时,索引从右向左走
#逆向思维:当输入的索引序号为负数时,就是指从右往左数的位置,规定最后一位为-1
print(f'{msg[:]}') #切片所有,即取出整个字符串,因为默认步长为1
print(f'{msg[::-1]}') #反向切片,反向取所有即从右往左取出整个字符串
print(f'{msg[-3:-1:1]}') #切片从-3截取到-2,正向截取
print(f'{msg[-2:-8:-1]}') #切片从-2截取到-7,反向截取
#结果是:hello king
#       gnik olleh
#       in
#       nik ol
  • 长度len()
msg = 'hello king'
#      0123456789
print(len(msg))
#结果是:10
  • 成员运算 in 和 not in
msg = 'good man'
#判断字符串中是否有我们给出的成员
print(f'{"king" in msg}')
print(f'{"king" not in msg}')
print(f'{not "king" in msg}')
#结果是:False
#       True
#       True
  • 移除 空白 strip()
'''注意:移除空白并不仅仅能够移除掉空白,其他字符串都可以移除,但是它的深层意思应该是移除空白并不会改变原来的字符串,只是可以将这个整体看作是一个新的字符串,这样更有利于理解'''
a = '%%&&a king'
print(f"{a.strip('%&')}") #我们可以把a.strip('%&')看作新的字符串
'''strip()默认为' ',并且不修改原值,也不创建新的空间'''
print(a)
#结果是:a king
#       %%&&a king

print(f"{a.strip('% in')}")
print(f"{a.strip('ing')}")
print(f"{a.strip('in')}")
print(f"{a.strip('&ing')}")
#结果是:&&a king
#%%&&a (有空格)
#%%&&a king
#%%&&a (有空格)
'''通过大量的使用 .strip() 发现:只有当字符串连在一起且通向尽头(无论左边还是右边)时,才能移除想要的字符串,但是我们要知道==对于原字符串我们并没有做任何改动=='''

#.strip()应用场景
password = input('password:')
if password.strip() == '666'
    print('login successful')
  • 切分 split()

注意:==字符串切分的结果会以一个列表的形式输出(切割掉的地方会用逗号隔开,如果被切分的部分是相同相连的字符串,则会有一个空白字符)==

name = 'kingandbobandtom&&jack'
name1 = name.split('and')  
'''注意:当不输入切分的次数时,默认是切分所有的相关字符串'''
name2 = name.split('and',1)
'''注意:当输入了切分的次数时,则只会切分规定的次数'''
name3 = name.split('&',1)
name4 = name.split('&')
'''注意:如果切分的对象是连着的相同的字符串,则会在第二次之后(包括第二次)切分该字符串时,留下空格字符串(空格字符串的空间大小只会是0)'''
print(name1)
print(name2)
print(name3)
print(name4)
#结果是:
#['king', 'bob', 'tom']
#['king', 'bobandtom']
#['kingandbobandtom', 'jack']
#['kingandbobandtom', '', 'jack']
  • 循环
char = 'hello world'
for ch in char:
    print(ch)
#可以取出字符串中的每一个字符
  • 左移除空白 lstrip() 和右移除空白 rstrip()
#lstrip是从左往右移除空白的意思,rstrip是从右往左移除空白
char = '&&&*** xx oo'
print(f"{char.lstrip('&* ')}")
print(f'{char}')
print(f"{char.lstrip('o')}")
print(f"{char.rstrip('o')}")
'''结果是:
xx oo
&&&*** xx oo
&&&*** xx oo
&&&*** xx 
'''
  • 小写转换 lower() 和大写转换 upper()
char = 'The Great Gatsby'
print(f"{char.lower()}") #把字符串中的字符全部换成小写
pirnt(f"{char.upper()}") #把字符串中的字符全部换成大写
'''结果是:
the great gatsby
THE GREAT GATSBY
'''
  • startswith() 方法用于检测字符串是否以指定的前缀开始
#startswith() 中右3个参数,其中后面两个参数start,end的默认值都是none
print(f'{char.startswith("G",4,5)}')
#结果是:True
  • endswith() 方法用于检测字符串是否以指定的后缀结束
#索引走的方向任然是正向的(从左往右)
print(f'{char.endswith("Gatsby",-6,-1)}')
print(f'{char.endswith("Gatsby",-6)}')
'''如果不知道end是什么位置,最好不写参数值'''
'''结果是:
False
True
'''
  • rsplit() 从右开始往左切分

注意:==字符串切分的结果(无论是否切分完成)会以一个列表的形式输出==

char = 'good *man'
print(f"{char.rsplit('*',1)}")
'''结果是:
['good','man']
'''
  • join() 拼接字符串(==拼接的结果会以字符串的形式输出==)
list = ['king','is','me'] #用列表来使用join(),结果更直观
print(f'{" ".join(list)}') #输出的结果的数据类型是字符串
'''结果是:
king is me
'''
  • replace() 替换字符串
char = 'you are king'
print(f"{char.replace('are','believe')}")
'''结果是:
you believe king
'''
  • isdigit() 判断字符串是否是一个数字

==注意:如果是一个小数,使用 isdigit() 方法判断时,计算机会把小数点当作一个非数字字符处理,即返回False==

#isdigit() 应用场景
inp_age = input('please enter your age:')
if inp_age.isdigit():
    age = int(inp_age)
    if age >=20 and age <=26:
        print('ok')
    else:
        print('good')
else:
    print(f"The type of input does not match")
  • find() 查找字符串位置,找不到会返回 -1,找到会返回find()中的参数字符串的第一个字符的索引序号

==注意:字符串的索引序号是从0开始的==

char = 'my name is king,hello,hello,my friend'
print(f"{char.find('hello')}") 
#结果是:16
  • rfind() 返回目标字符串中找到子字符串首字符的==最高索引序号==
char = 'my name is king,hello,hello,my friend'
print(f"{char.rfind('hello')}") 
#结果是:22
  • index() 功能和find() 相差无几,只不过当index()找不到会==报错==
char = 'my name is king,hello,hello,my friend'
print(f"{char.index('hello')}") 
#结果是:16
  • rindex() 功能和rfind() 相差无几,只不过当index()找不到会==报错==
char = 'my name is king,hello,hello,my friend'
print(f"{char.rindex('hello')}") 
#结果是:22
  • center() 把字符串放在填充字符串的中间
  • ljust() 把字符串放在填充字符串的左边
  • rjust() 把字符串放在填充字符串的右边
  • zfill() 默认在字符型左边填充 0
print(f"{'king'.center(30,'^')}")#两个参数,前面是填充数量,后面是填值
print(f"{'king'.ljust(30,'^')}")
print(f"{'king'.rjust(30,'^')}")
print(f"{'king'.zfill(30)}")  #只有一个参数
'''结果是:
^^^^^^^^^^^^^king^^^^^^^^^^^^^
king^^^^^^^^^^^^^^^^^^^^^^^^^^
^^^^^^^^^^^^^^^^^^^^^^^^^^king
00000000000000000000000000king
'''
  • expandtabs() 方法把字符串中的 ==tab 符号('\t')==转为空格,tab 符号('\t')默认的空格数是 8
char = "hello\tworld\tpython"
print(f'{char.expandtabs()}')
print(f'{char.expandtabs(20)}')
'''结果是:
hello   world   python
hello               world               python
'''
  • capitalize() 方法:将字符串的第一个字母变成大写,其他字母变小写。对于 8 位字节编码需要根据本地环境
  • swapcase() 方法:将字符串中的大写换成小写,小写换成大写
  • title() 方法:返回"标题化"的字符串,就是说所有单词的首个字母转化为大写,其余字母均为小写。注意:==非字母后的第一个字母将转换为大写字母==
char = 'My name is King,26 years old,gender is Male'
print(f"{char.capitalize()}") #没有参数
print(f"{char.swapcase()}") #没有参数
print(f"{char.title()}") #没有参数
'''结果是:
My name is king,26 years old,gender is male
mY NAME IS kING,26 YEARS OLD,GENDER IS mALE
My Name Is King,26 Years Old,Gender Is Male
'''
  • 字符串类型的其他内置方法
    • isdecimal(): 检查字符串是否值包含十进制字符,如果是返回True,否则返回False
    • isdigit(): 如果字符串只包含数字则返回True,否则返回False
    • isnumeric(): 如果字符串中只包含数字字符,则返回True,否则返回False
    • isalnum(): 如果字符串至少有一个字符并且所有字符都是字母或数字则返回True,否则返回False
    • isalpha(): 如果字符串至少有一个字符并且所有字符都是字母则返回True,否则返回False
    • islower(): 如果字符串中只包含至少一个区分大小写的字符,并且所有这些(区分大小写的)字符都是小写,则返回True,否则返回False
    • isspace(): 如果字符串中只包含空白,则返回True,否则返回False
    • isupper(): 如果字符串中包含至少一个区分大小写的字符,并且所有这些(区分大小写的)字符都是大写,则返回True,否则返回False
    • istitle(): 如果字符串是标题类型的(见title()),则返回True,否则返回False

4 存一个值or多个值

  • 一个值

5 有序or无序

  • 不存在这种说法

6 可变or不可变

  • id不变值可变,即在原值的基础上修改,则为可变数据类型;值变id也变,即重新申请一个空间放入新值,则为不可变数据类型
i = 10
print(id(i))
i = 20
print(id(i))

结果(略)

它的地址发生了改变,所以为不可变数据类型

猜你喜欢

转载自www.cnblogs.com/itboy-newking/p/10840148.html
今日推荐