一、字符串
字符串就是由若干个不同的unicode字符组成的不可变有序序列
1 .字符串创建
#单引号字符串
str1 = '天要下雨,娘要嫁人,由他去吧'
str2 = str() #空串
str3 = str([10,20,30])
#双引号字符串
str2 = "天要下雨,娘要嫁人,由他去吧"
#三引号字符串 多行字符串
str3 = '''
好雨知时节
当春乃发生
'''
str4 = """
随风潜入夜
润物细无声
""
2.获取字符
因为是不可变序列,所以不能修改单个字符;凡是修改字符串的操作都产生新串
str1 = '天要下雨,娘要嫁人,由他去吧'
print(str1[0],str1[-1]) #天 吧
3.字符串转义
- 常见转义字符
转移字符 | 说明 | 转移字符 | 说明 |
---|---|---|---|
\' | 单引号 | \n | 换行 |
\" | 双引号 | \r | 回车 |
\t | tab | \\ | \ |
- 原生字符
如果在字符串中不把\当做转移字符,可以使用
str1 = r’c:\wh1803\course\1’
print(str1) #c:\wh1803\course\1
4.序列通用操作
#1 字符串拼接
#对于字符串字面值,只要相邻两个字符串中间没有其他字符就会自动拼接为一个字符串
str1 = '中美达成共识'
'不打贸易战'
print(str1) #中美达成共识不打贸易战
#其他情况使用+运算符拼接字符串
str1 = '你好'
str2 = ' 树先生'
print(str1 + '世界')
print(str1 + str2)
#2.字符串重复
str1 = '汪' * 3
print(str1) #汪汪汪
#3.成员操作
str1 = '天要下雨,娘要嫁人,由他去吧'
if '天' in str1:
print('是成员')
else:
print('不是成员')
#4.字符串截取(切片)
str1 = '123456'
print(str1[0:2]) #'12'
print(str1[1:]) #'23456'
print(str1[::2]) #'135'
print(str1[:]) #'123456'
print(str1[::-1]) #'654321'
#5.字符串长度
print(len(str1))
5 字符串常用函数
5.1 字符串查找和替换
str1 = ‘a fox jumped over the fence’
方法名 | 说明 | 示例 |
---|---|---|
str.count(sub,start=0,end=len(string)) | 查找子串sub出现的次数;start从指定下标开始查,end结束下标 | str1.count(‘f’) |
str.find(str, beg=0, end=len(string)) | 从左向右检测字符串中是否包含子字符串 str,如果包含返回下标,否则返回-1。beg和end是可选参数,指定查找范围 | str1.find(‘fox’) |
str.rfind(sub[, start[, end]]) | 从右向左检测字符串中是否包含sub子串,包含返回子串的下标,否则返回-1 | str1.rfind(‘fox’) |
str.index(sub[, start[, end]]) | 作用类似find,但子串sub不存在会报错ValueError | str1.index(‘fox’) |
str.rindex(sub[, start[, end]]) | 从右向左检测,类似rfind,会报ValueError | str1.rindex(‘fox’) |
str.replace(old, new[, count]) | 返回一个新字符串,原串中的old被替换为new,可选参数count指定替换次数。 | str1.replace(‘a’,‘many’) |
5.2 字符串分隔和组合
方法名 | 说明 | 示例 |
---|---|---|
str.split([sep[, num=count(sep)]]) | 将字符串拆分为以sep为分隔符的列表,如果指定num,则最多拆分num次 | str1.split(’ ') |
str.rsplit([sep[, num=count(sep)]]) | 从右向左拆分 | |
str.partition(seq) | 将字符串拆分为一个有三个元素的元组(seq前的字符串,seq,seq后的字符串)。 | |
str.rpartion(seq) | 同上 | |
str.splitlines([keepends]) | 拆分一个包含多行的字符串,以每行为一个元素返回一个列表。keepends是一个True字符或非零整数,表示保留行尾标志(即换行符) | |
str.join(seq) | 以指定字符串str作为分隔符,将seq对象中所有的元素(字符串表示)合并为一个新的字符串;seq可以是字符串、列表等 |
5.3 字符串判断
方法 | 说明 | 示例 |
---|---|---|
str.isalpha() | 判断字符串是否由字母构成并且只包含字母,是返回True,否返回False | str1.isalpha() |
str.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。 |
5.4字符串转换(产生新的字符串)
方法 | 说明 | 示例 |
---|---|---|
str.lower() | 字符串转小写 | |
str.upper() | 字符串转大写 | |
str.swapcase() | 把字符串中的大小写字母互换,大写转换成小写,小写转换成大写。不去管非字母类字符。 | |
str.capitalize() | 将字符串的第一个字符转换为大写, 其余转换为小写 | |
str.title() | 字符串中每个单词的首字母大写,其余小写。 | |
str.lstrip([chars]) | 去除字符串左边指定的字符,默认是去除空格 | |
str.rstrip([chars]) | 去除字符串左边指定的字符,默认是去除空格 | |
str.strip([chars]) | 去除字符串两边边指定的字符,默认是去除空格 |
4.5 其它方法
#1. 将其他类型转换为字符串
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)
6. 字符串格式化
-
用%格式化
%[flags][width][.precision]typecode
flags:对其方式,-左对齐 +右对齐(默认),0表示用0填充(只针对数值型),默认是用空格填充
width:所占宽度,单位是列
.precision: 精度,如果带小数点,可以指定带几位小数,指定后会四舍五入
typecode: d 将数值转换为整型显示;f 将数值转换为浮点数显示 s将数值转换为字符串显示
#大家好,我叫 王尼玛,我今年35岁了,我有5000000.69
print(“大家好,我叫%+6s,我今年%d岁了,我有%10.2f” % (‘王尼玛’,35,5000000.687)) -
用format格式化
[[fill]align][sign][#][width][.precision][type] fill: 填充字符,可选 align: 对齐方式 <左对齐 >右对齐 ^居中对齐 sign:显示符号,+正数显示正号,负数显示符号;-正数不显示符号,负数显示符号 #: 对于2、8、16进制会显示0b 0o 0x width: 宽度 , 千分位分隔符 .precision:精度 type: s字符串 d整型 f浮点数 tp1 = "I am {}, age {}, {}".format("seven", 18, 'alex') tp2 = "I am {name}, age {age}, really {name}".format(name="seven", age=18) tp3 = "I am {:s}, age {:d}, money {:.0f}".format("seven", 18, 88888.1) print(tp1) #I am seven, age 18, alex print(tp2) #I am seven, age 18, really seven print(tp3) #I am seven, age 18, money 88888