Python中的String
认识字符串
字符串是 Python 中最常用的数据类型之一。我们一般使用引号来创建字符串。创建字符串很简单,只需为变量分配一个值即可。
字符串的标识符:str
一对引号字符串
name1 = 'Tom'
name2 = "Rose"
三引号字符串
name3 = '''Tom'''
name4 = """Rose"""
a = '''I am Tom,
nice to meet you!'''
b = """I am Rose,
nice to meet you!"""
【注意】:三引号字符串支持换行,而一对引号的字符串不支持换行。
【问题】:如何创建一个字符串I'm Tom
?
办法1:
外层用双引号,避免与内容里的单引号混淆。
c = "I'm Tom"
办法2:
内容里的单引号前面加一个反斜杠\
进行转义。
d = 'I\'m Tom'
字符串输入
利用 input() 函数接收用户的输入,input()接收到的内容全部会转化成字符串类型。
name = input("请输入您的名字:")
print(f'您输入的名字是{name}')
print(type(name)) #<class 'str'>
字符串输出
name = "Tom"
print(name)
print('我的名字是%s'%name)
print(f'我的名字是{name}')
print("我的名字是"+name)
字符串下标(索引)
字符串的下标从0开始。
name = "abcdef"
print(name[0]) #a
print(name[2]) #c
测试返回值类型:
str1 = '012345678'
s1 = str1[3]
print(type(s1)) #<class 'str'>
字符串切片
切片是指对操作的对象截取其中一部分的操作。字符串、列表、元组都支持切片操作。
语法如下:
序列[开始位置下标:结束位置下标:步长]
【注意】:切片不包括结束位置下标对应的数据。截取的部分是一个左闭右开区间。
步长默认为1,如果步长取负数,即代表从右往左进行切片。
str1 = '012345678'
print(str1[2:5:1]) # 234
print(str1[2:5:2]) # 24
str1 = '012345678'
print(str1[2:5]) # 234 -- 如果不写步长,默认步长为1
print(str1[:5]) # 01234 -- 如果不写开始,默认从0开始选取
print(str1[2:]) # 2345678 -- 如果不写结束,表示选取到最后
print(str1[:]) # 012345678 -- 如果不写开始和结束,表示选取所有
负数测试:
# 负数测试
str1 = '012345678'
print(str1[::-1]) # 876543210 -- 如果步长为负数,表示倒叙选取
print(str1[-4:-1]) # 567 -- 下标-1表示最后一个数据,依次向前类推
终极测试:
# 终极测试
str1 = '012345678'
print(str1[-4:-1:1]) # 567
print(str1[-4:-1:-1]) # 不能选取出数据:从-4开始到-1结束,选取方向为从左到右,但是-1步长:从右向左选取
# **** 如果选取方向(下标开始到结束的方向) 和 步长的方向冲突,则无法选取数据
print(str1[-1:-4:-1]) # 876
测试返回值类型:
str1 = '012345678'
s1 = str1[-4:-1:1]
print(type(s1))#<class 'str'>
可见字符串的切片操作截取的部分仍然是一个字符串。
字符串的常用操作方法
1.字符串的查找
字符串查找方法是查找子串在字符串中的位置或出现的次数。
- find():检测某个字串是否包含在这个字符串中,如果包含,则返回这个子串开始的位置下标,否则返回-1
mystr = "hello world and java and c++ and Python"
print(mystr.find("and")) #12
print(type(mystr.find("and"))) #<class 'int'>
print(mystr.find("and",15,30)) #21
print(mystr.find('ands')) #-1
- index()::检测某个字串是否包含在这个字符串中,如果包含,则返回这个子串开始的位置下标,否则报异常
ValueError: substring not found
mystr = "hello world and java and c++ and Python"
print(mystr.index("and")) #12
print(type(mystr.index("and"))) #<class 'int'>
print(mystr.index("and",15,30)) #21
print(mystr.index('ands')) #ValueError: substring not found
- rfind():和find()功能相同,但查找方向为右侧开始。
- rindex():和index()功能相同,但查找方向为右侧开始。
- count():返回某个子串在子串中出现的次数。
mystr = "hello world and java and c++ and Python"
print(mystr.count("and")) #3
print(mystr.count("and",15,30)) #1
print(mystr.count('ands')) #0
2.字符串的修改
- replace():替换
mystr = "hello world and java and c++ and Python"
print(mystr.replace("and","和"))
#hello world 和 java 和 c++ 和 Python
print(mystr.replace("and","和",1))
#hello world 和 java and c++ and Python
print(mystr.replace("and","和",10))
#替换次数超过子串在字符串中出现次数,全部替换,不报错
#hello world 和 java 和 c++ 和 Python
mystr.replace("and","和")
str1 = mystr.replace("and","和")
print(mystr)#hello world and java and c++ and Python
print(str1)#hello world 和 java 和 c++ 和 Python
【注意】:replace()函数并不会修改原有字符串的值,但他的返回值可以接收到修改后的字符串。
【注意】:数据按照是否能直接修改可分为可变类型和不可变类型两种。字符串类型的数据修改的时候不能改变原有的字符串,属于不可变类型。
- split():按照指定字符分割字符串
mystr = "hello world and java and c++ and Python"
print(mystr.split("and"))
#['hello world ', ' java ', ' c++ ', ' Python']
print(mystr.split("and",2))
#['hello world ', ' java ', ' c++ and Python']
print(mystr.split(" "))
#['hello', 'world', 'and', 'java', 'and', 'c++', 'and', 'Python']
print(mystr.split(" ",2))
#['hello', 'world', 'and java and c++ and Python']
【注意】:如果分割字符是原有字符串的子串,分割后会丢失该子串。
print(type(mystr.split(" ",2)))#<class 'list'>
分片函数的返回值结果是一个列表类型:list
- join():用一个字符或子串合并字符串,将多个字符串合并为一个字符串。
list1 = ['hello','world','and','python']
print("--".join(list1))#hello--world--and--python
t1 = ('hello','world','and','python')
print("===".join(t1))#hello===world===and===python
- capitalize():将字符串第一个字符转换成大写。
- title():将字符串每个单词的首字母转换成大写。
- lower():将字符串中大写转小写。
- upper():将字符串中小写转大写。
- lstrip():删除字符串左侧空白字符。
- rstrip():删除字符串右侧空白字符。
- strip():删除字符串两侧空白字符。
- ljust():返回一个原字符串左对齐,并使用指定字符(默认空格)填充至对应长度的新字符串。
- rjust():返回一个原字符串右对齐,并使用指定字符(默认空格)填充至对应长度的新字符串。
- center():返回一个原字符串居中对齐,并使用指定字符(默认空格)填充至对应长度的新字符串。
3.字符串的判断
- startswith():检查字符串是否以指定子串开头,是则返回True,否则返回False。如果设置开始和结束位置下标,则在指定范围内检查。
- endswith():检查字符串是否以指定子串开头,是则返回True,否则返回False。如果设置开始和结束位置下标,则在指定范围内检查。
- isalpha():如果字符串至少有一个字符并且所有字符都是字母则返回True,否则返回False。
- isdigit():如果字符串只包含数字则返回True,否则返回False。
- isalnum():如果字符串至少有一个字符并且所有字符都是字母或数字则返回True,否则返回False。
- isspace():如果字符串中只包含空白,则返回True,否则返回False。
总结
三引号字符串支持换行,而一对引号的字符串不支持换行。
1.字符串的查找
- find()
- index()
- rfind()
- rindex()
- count()
2.字符串的修改
- replace()
- split()
- join()
- capitalize()
- title()
- lower()
- upper()
- lstrip()
- rstrip()
- strip()
- ljust()
- rjust
- center()
3.字符串的判断
- startswith()
- endswich
- isalpha()
- isdigit()
- isalnum()
- isspace()