字符串
字符串就是由若干个不同的unicode字符组成的不可变有序序列
字符串创建
1.原生字符串 字符串中反斜线不再代表转移
2.python中没有字符的概念,一个字符也是字符串
3.字符串是不可变序列
4.任何会对字符串修改的操作都会产生新字符串
#单引号字符串
str1 = '物以类聚,人以群分'
str2 = str() #空串
str3 = str([10,20,30])
#双引号字符串
str2 = "物以类聚,人以群分" #三引号字符串 多⾏字符串
str3 = '''
物以类聚
人以群分
'''
str4 = """
物以类聚
人以群分
""
### 获取字符
因为是不可变序列,所以不能修改单个字符;凡是修改字符串的操作都产生新串
str1 = ‘物以类聚,人以群分’
print(str1[0],str1[-1]) #物 分
遍历
a = '123456789'
for ch in a:
print(ch)
for i in range(len(a)):
print(a[i],end=' ')
通用
s1 = "Hello "
s2 = "World"
1.字符串链接,产生新串
res = s1 + s2
print(res)
#如果两个字符串中间没有任何东西,也会自动产生一个新串
res1 = "123""456"
print(res1)
2.* 重复
print("*"*100)
3.len 字符串个数
print(len(s1))
3.in 判定字符串是否是子串
s1 = "Hello "
print("e" in s1)
print("el" in s1)
print("hel" in s1)
切片
s = "1234567890"
print(s[::-1])
print(s[:-4:-1])
print(s[-4:0:-1])
print(s[::-2])
print(s[:3])
print(s[5:3]) # 空字符串
查找和替换
方法名 | 说明 | 示例 |
---|---|---|
str.count(sub,start=0,end=len(string)) | 查找子串sub出现的次数;start从指定下标开始查,end结束下标 | str1.count() |
str.find(str, beg=0, end=len(string)) | 从左向右检测字符串中是否包含子字符串 str,如果包含返回下标,否则返回-1。beg和end是可选参数,指定查找范围 | str1.find() |
str.rfind(sub[, start[, end]]) | 从右向左检测字符串中是否包含sub子串,包含返回子串的下标,否则返回-1 | str1.rfind() |
str.index(sub[, start[, end]]) | 作用类似find,但子串sub不存在会报错ValueError | str1.index() |
str.rindex(sub[, start[, end]]) | 从右向左检测,类似rfind,会报ValueError | str1.rindex() |
str.replace(old, new[, count]) | 返回一个新字符串,原串中的old被替换为new,可选参数count指定替换次数。 | str1.replace(‘a’,‘b’) |
1.str.count(子串) 查找子串出现的次数
str1 = 'a fox jumped over the fence'
print(str1.count('e'))
print(str1.count('e',0,11))
print(str1.count('fox'))
2.find(sub,start,end)
如果存在返回子串第一个字符在主串中的下标;否则返回-1
print(str1.find("over"))
print(str1.find("ove1r"))
3.replace(指定子串,替换字符串,替换次数) 返回新串
str1 = 'a fox jumped over the fox fence'
print(str1.replace("fox","turtle"))
print(str1.replace("fox","turtle",1))
4.rfind从右向左找
str1 = 'a fox jumped over fox the fence'
print(str1.rfind('fox')) # 18
字符串分隔和组合
方法名 | 说明 | 示例 |
---|---|---|
str.split([sep[,num=count(sep)]]) | 将字符串拆分为以sep为分隔符的列表,如果指定num,则最多拆分num次 | str1.split(’ ') |
str.rsplit([sep[,num=count(sep)]]) | 从右向左拆分 | |
str.partition(seq) | 将字符串拆分为⼀个有三个元素的元组(seq前的字符串,seq,seq后的字符串) | |
partion(seq) | 同上 | |
str.splitlines([keepends]) | 拆分一个包含多⾏的字符串,以每一为⼀个元素返回一个列表。keepends是一个True字符或非零整数,表示保留行尾标志(即换行符) | |
str.join(seq) | 以指定字符串str作为分隔符,将seq对象中所有的元素(字符串表示)合并为一个新的字符串;seq可以是字符串、列表等 |
str1 = ‘a fox jumped over the fence’
1.str.split(sep) 以指定分隔符为基准,将字符串分割为列表;sep默认是空格
res = str1.split()
print(res)
s = "333hello333world"
res = s.split("333")
# res = [value for value in res if value]
print(res)
2.多行字符串
s = “”“11111
22222
33335
444466
“””
1.splitlines可以将多行字符串分割为一个列表
print(s.splitlines())
2.str.join(可迭代对象) 将可迭代对象的字符串元素拼接为一个新串
# 列表中元素必须是字符串
list1 = ['12',34,'56']
# 把列表中元素转换为字符串
list1 = [str(value) if isinstance(value,(int,float)) else value for value in list1 ]
print(list1)
# res = ''.join(list1)
res = ','.join(list1)
print(res)
字符串判断
方法名 | 说明 | 示例 |
---|---|---|
str.isalpha() | 判断字符串是否由字母构成并且只包含字母,是返回True,否返回False | str1.isalpha() |
isalnum() | 检测字符串是否由字母和数字组成,如果都是数字或字母返回True,否则返回False | |
str.isdigit() | 检测字符串是否由数字构成,可检测byte类型 | |
str.isdecimal() | 检测字符串是否由数字构成 | |
str.isnumeric() | 检测字符串是否由数字构成, 可以检测汉字数字:十 | |
str.isspace() | 检测字符串是否只有空格或tab构成 | |
str.islower() | 检测字符串中的字母字符是否全部由校写字母组成 | |
str.isupper() | 检测字符串中的字母字符是否全部由大写写字母组成 | |
str.startswith(suffix[,start[, end]]) | 用于判断字符串是否以指定子字符串头,如果是则返回True,否则返回False。 | |
str.endswith(suffix[,start[, end]]) | 用于判断字符串是否以指定子字符串 尾,如果是则返回True,否则返回False。 |
# isalpha() 字符串是否有字母构成
# print("sdfs你好f".isalpha())
# s = "wueiu你ir"
# for ch in s:
# if not (65 <=ord(ch)<=90 or 97<=ord(ch)<=122):
# print(False)
# break
# else:
# print(True)
# 是否纯数字
# print("23423".isdecimal())
# print("23423".isdigit())
# print("23423".isnumeric())
# print(b"23423".isdigit()) # 可以判断byte
# print(b"23423".isdecimal())
# print(b"23423".isnumeric())
# print("十五".isnumeric())
# print("23423".isdigit())
# print("23423".isdecimal())
# 大小写判断
# print("AAAA".isupper())
# print("aaa".islower())
# startwith(sep)
# print("h1ttp://wwww.baidu.com".startswith("http"))
# print("http://wwww.baidu.com".endswith("com"))
# 字符串转换
# print("sdfsdUYUdfhjsdfdsf".lower())
# print("sdfsdUYUdfhjsdfdsf".upper())
# strip 字符串截取
s = " 以一己之力对抗一家巨头产业乃至整个政府,需要多少勇气和毅力?又需要多久的等待多大的牺牲?题材其实并不陌生,整体拍得也很平很严肃,但得益于Todd Haynes的出色功力,整部片的节奏都非常稳、故事线也清晰,虽时长两小时有余却并不显冗长,而那种压抑与震惊感又是随着故事不断发展逐渐渗透着的,很敢拍也的确拍的很好。马克叔还是呆呆的,安妮大概算是正常发挥(波浪长发还是美到我昏厥啊呜呜呜),以及一度对影片中... (展开)"
# 去除两边空格
s = s.strip().rstrip("(展开)").strip().strip("...")
print(s)
字符串转换
方法名 | 说明 | 示例 |
---|---|---|
str.lower() | 字符串转小写 | |
str.upper() | 字符串转大写 | |
str.swapcase() | 把字符串中的大小写字母互换,大写转换成小写,小写转换大写。不去管非字母类字符。 | |
str.capitalize() | 将字符串的第一个字符转换为大写, 其余转换为小写 | |
str.title() | 字符串中每个单词的首字母大写,其余小写。 | |
str.lstrip([chars]) | 去除字符串左边指定的字符,默认是去除空格 | |
str.rstrip([chars]) | 去除字符串左边指定的字符,默认是去除空格 | |
str.strip([chars]) | 去除字符串两边边指定的字符,默认是去除空格 |
其他方法
- 将其他类型转换为字符串
print(str(90)) #'90'
print(str([20,30])) #'[20,30]'
2 ord(x) 返回一个字符所对应的码值
print(ord('a')) #97
print(ord('中')) #20013
3 chr(x) 输如一个unicode码,返回一个对应的字符。
print(chr(20013)) #中
eval,将字符串当做代码执行
age = 1
print(eval('age + 3')) # 4
print(eval('+123')) #123
print(eval('3 + 2')) #5
有安全问题
eval("__import__('os').system('dir')") #显示当前目录的文件列表
4 repr(x) 返回一个对象的String格式,适合机器执行
a = [20,30]
s1 = repr(a)
list1 = eval(s1)
list2 = str(a)
print(a == list1)
print(a == list2)
字符串格式化
格式化,就是按照指定格式产生一个新串
print("="*100)
s = "%-10d %+20s" % (20,"hello world")
print(s)
format
str.format() ⽅法通过字符串中的花括号 {} 来识别替换字段 replacement field,
从⽽完成字符串的格式化。
s = "{}---{}===={}".format(10,20,30)
s = "{}---{}====".format(10,20,30)
用数字表示对应的变量
{}中的数字表示{}所对应的变量(变量从左向右的编号是0,1,2,3)
s = “{1}==={0}”.format(“你好”,90)
用变量名
s = "{age}===={name}".format(name='tom',age=30)
print(s)
完整用法
s = "{0:k^30}==={1:10.2f}".format(20,30)
print(s)