一、认识字符串
字符串是Python中最常用的数据类型,我们一般使用引号拉来创建字符串。创建字符串很简单,只要为变量分配一个值即可。
# 单引号表示字符串
a = '你好,单引号'
#单引号换行
e = 'hello' \
'world'
#单引号的特殊情况 可以用转义字符解决
f = 'It\'s a cat'
# 双引号表示字符串
b = "你好,双引号"
# 三引号表示字符串
c = """你好,三引号"""
#三引号的特殊用法 可以换行
d = """hello
world"""
print(a, b, c, d, e)
print(type(a), type(b), type(c))
二、字符串输出
- %s输出字符串
str1 = "I am a toy"
print("the truth is, %s, that people enjoy, still all of the tricks don't work anymore, then they are bored of me" % str1)
- f格式化输出
str1 = "I am a toy"
print(f"the truth is, {str1}, that people enjoy, still all of the tricks don't work anymore, then they are bored of me")
三、字符串输入
在Python中,使用input()接收用户输入。
password = input("请输入密码:")
print(f"您输入的密码是:{password}")
四、下标
下标又叫索引,就是编号,作用是通过下标迅速找到对应的数据。
注意:下标都是从0开始的。
str1 = "bjyxszd"
print(str1)
print(str1[0])
print(str1[1])
print(str1[2])
print(str1[3])
print(str1[4])
print(str1[5])
print(str1[6])
五、切片
切片是指对操作的对象截取其中一部分的操作。字符串、列表、元组都支持切片操作。
语法:序列名[ 开始位置下标:结束位置下标:步长 ]
注意:
- 截取的数据不包含结束位置下标对应的数据,正负整数均可(左闭右开)。
- 步长是选取间隔,正负整数均可,默认步长为1。
str1 = "bjyxszd"
print(str1[4:7]) #szd
print(str1[0:7:2]) #bysd
print(str1[:7:3]) #bxd
print(str1[:7]) #bjyxszd 不写开始默认从下标0开始
print(str1[4:]) #szd 不写结束默认选取到最后
print(str1[:]) #bjyxszd 开始和结束都不写表示选取所有
print(str1[::-1]) #dzsxyjb 步长是负数表示从后往前倒序选取
print(str1[-5:-1]) #xsz 下标-1表示最后一个数据,依次向前类推
print(str1[-5:-1:-1]) #不能选取,因为-5到-1是从左往右选取,而步长-1是从右往左选取,方向冲突
print(str1[-1:-5:-1]) #dzsx 可以选取,保证选取方向和步长方向一致的话就可以正常选取
六、字符串的常用操作方法
字符串的常用操作方法有查找、修改和判断三大类。
6.1 查找
所谓字符串查找方法即是查找子串在字符串中的位置或出现次数。
- find():检测某个子串是否在字符串中,如果在返回这个子串开始的位置下标,否则返回-1。
语法:字符串序列.find(子串,开始位置下标,结束位置下标) PS:开始和结束下标可以省略,表示在整个字符串中查找。
#find()测试
str1 = "The truth is, I am a toy, that people enjoy, till all of the tricks dont't work anymore, then they are bored of me"
print(str1)
print(str1.find("a")) #16
print(str1.find("a",17)) #19 可以不写结束位置
print(str1.find("z")) #-1 没有查找到返回-1
- index():检测某个子串是否包含在这个字符串中,如果在返回这个子串的开始的位置下标,否则报异常。
语法:字符串序列.index(子串,开始位置下标,结束位置下标) PS:开始和结束下标可以省略,表示在整个字符串中查找。
#index()测试
str1 = "The truth is, I am a toy, that people enjoy, till all of the tricks dont't work anymore, then they are bored of me"
print(str1)
print(str1.index("a")) #16
print(str1.index("a",17)) #19 可以不写结束位置
#print(str1.index("z")) #如果index查找子串不存在报错
- count():返回某个子串在字符串中的出现次数。
语法:字符串序列.count(子串,开始位置下标,结束位置下标)
#count()测试
str1 = "The truth is, I am a toy, that people enjoy, till all of the tricks dont't work anymore, then they are bored of me"
print(str1)
print(str1.count("a")) #统计子串出现次数
print(str1.count("a",15,30)) #在当前这个区间的出现次数
print(str1.count("z")) #如果不存在则返回0
- rfind():和find()功能相同,但是查找方向相反,从右侧开始。
- rindex():和index()功能相同,但是查找方向相反,从右侧开始。
str1 = "The truth is, I am a toy, that people enjoy, till all of the tricks dont't work anymore, then they are bored of me"
print(str1)
#rfind()测试
print(str1.rfind("a")) #99
print(str1.rfind("z")) #-1
#rindex()测试
print(str1.rindex("a")) #99
#print(str1.rindex("z")) #报错
6.2 修改
所谓字符串修改,指的就是通过函数的形式修改字符串中的数据。
- replace():替换
语法:字符串序列.replace(旧子串,新子串,替换次数)
注意:替换次数如果超出子串出现次数,则替换次数为该子串的出现次数。
old_str = "The truth is, I am a toy, that people enjoy, till all of the tricks dont't work anymore, then they are bored of me"
# 把原来句子中的","替换成"*",说明replace函数有返回值,返回值是修改后的字符串。调用了replace函数后,发现原有字符串的数据并没有被修改,
# 修改后的数据是replace函数的返回值,进而说明字符串是不可变数据类型。
# new_str = old_str.replace(",", "*")
# new_str = old_str.replace(",", "*", 1)
new_str = old_str.replace(",", "*", 100) #替换次数如果超出子串出现次数,则替换次数为该子串的出现次数。
print(new_str)
print(old_str)
PS:数据按照是否能直接修改分为可变类型和不可变类型两种,字符串类型的数据在修改的时候不能改变原有字符串,属于不能直接修改数据的类型即是不可变类型。
- split():按照指定字符分割字符串
语法:字符串序列.split(分割字符,num)
注意:num是分割字符出现的次数,即将来返回数据个数为num+1个。
# split() 分割,返回一个列表,会丢失分割字符
old_str = "The truth is, I am a toy, that people enjoy, till all of the tricks dont't work anymore, then they are bored of me"
# list1 = old_str.split(",")
list1 = old_str.split(",", 1) #分割字符出现一次,所以返回有两个元素的列表
print(list1)
- join():用一个字符或子串合并字符串,即是多个字符串合并成一个新的字符串。
语法:连接字符或子串.join(多字符串组成的序列)
# join() 合并列表里面的字符串数据成为一个大字符串
mylist = ["WW", "YY", "BB"]
mystr = "$".join(mylist) #表示使用$字符将各个字符串连接起来
print(mystr)
- capitalize():将字符串的第一个字符转换成大写。
注意:capitalize()函数转换后,只字符串第一个字符大写,其余字符均小写。
- title():将字符串每个单词首字母转换成大写。
- lower():将字符串大写转小写。
- upper():将字符串中小写转大写。
- Lstrip():删除字符串左侧字符。
- rstrip():删除字符串右侧字符。
- strip():删除字符串两侧字符。
- ljust():返回一个原字符串左对齐,并使用指定字符(默认空格)填充至对应长度的新字符串。
语法:字符串序列.ljust(长度,填充字符)
# ljust()测试
mystr = "hello"
newstr = mystr.ljust(10,"*")
print(newstr) #hello*****
- rjust():返回一个原字符串右对齐,并使用指定字符(默认空格)填充至对应长度的新字符串,语法和ljust相同。
- center():返回一个原字符串居中对齐,并使用指定字符(默认空格)填充至对应长度的新字符串,语法和ljust相同。
6.3 判断
所谓判断即是判断真假,返回的结果是布尔型数据类型:True或False。
- startwith():检查字符串是否以指定子串开头,是则返回True,否则返回False。如果设置开始和结束位置下标,则在范围内进行检查。
语法:字符串序列.startwith(子串,开始位置下标,结束位置下标)
mystr = "I want you, I'll color me blue, anything it takes to make you stay."
print(mystr.startswith("I")) # True
print(mystr.startswith("i")) # False
- endwith():检查字符串是否以指定子串结尾,是则返回True,否则返回False。如果设置开始和结束位置下标,则在范围内进行检查。语法和startwith()相同,此处不做举例。
- isalpha():如果字符串至少有一个字符并且所有字符都是字母返回True,否则返回False。
- isdigit():如果字符串只包含数字则返回True,否则返回False。
- isalnum():如果字符串至少有一个字符并且所有字符都是字母或数字则返回True,否则返回False。
- isspace():如果字符串只包含空白则返回True,否则返回False。