DAY09 字符串
一. 字符串相关函数
1.1 len()
len(数据) - 字符串长度
1.2 str()
str(数据) - 所有的数据都可以转换成字符串;转换的时候是在数据的打印值外面加引号
num = 123
print(num) # 123
str(num) # '123'
list1 = [10,20,30]
print(list1) # [10, 20, 30] 打印列表数据间逗号后加空格,双引号变单引号
print(str(list1),type(str(list1))) # [10, 20, 30] <class 'str'>,打印后str的''不显示,并且数据间逗号后加空格,在字符串中,下标标准化
# 打印str会先将原数据类型写法标准化,再变成字符串
1.3 eval()
获取指定字符串引号中的内容(去掉字符串的引号)
注意:这里的字符串去掉引号后必须是合法的表达式
- 去掉引号后必须是合法的数据 - str的反向操作
result = eval('100') # 100
print(result, type(result)) # 100 <class 'int'>
# result = eval('abc') # 报错
result = eval('"abc"') # "abc"
# 原字符串长度5,eval后长度3
result = eval('[10, 20, 30]') # [10, 20, 30],普通列表
# result = eval('[abc, 20, 30]') # 报错,去引号后列表中abc不合法
- 去掉引号后是合法的表达式
result = eval('100 + 200')
print(result) # 300
abc = 10
result = eval('abc')
print(result) # 10 合法
nums = [10, 20, 30]
eval('nums.append(100)')
print(nums) # [10, 20, 30, 100]
二. 字符串相关方法
字符串.方法()
2.1 join
字符串.join(序列) - 将序列中的元素用指定字符串连接成一个新的字符串
list1 = ['hello', 'world!', '你好', '世界']
result = ''.join(list1)
print(result) # 'helloworld!你好世界'
result = ','.join(list1)
print(result) # hello,world!,你好,世界
result = '123'.join(list1)
print(result) # hello123world!123你好123世界
str1 = 'hello'
# 'h e l l o'
result = ' '.join(str1)
print(result)
# 练习:将nums中元素拼接成一个数字,102030452
nums = [10, 20, 30, 4, 52]
result = ''.join([str(x) for x in nums])
print(result)
# 练习:将nums中所有的个位数拼接成一个数字字符串, '09042'
nums = [10, 29, 30, 4, 52]
result = ''.join([str(x % 10) for x in nums])
print(result)
# 练习:将list1中所有的数字用'+'连接,并且计算他们的和: '9+1.23+8+22.2=50.43'
list1 = [19, 'abc', True, 1.23, 8, 22.2, '环境']
result = '+'.join([str(x) for x in list1 if type(x) in (int, float)])
# print(result,'=',eval(result))
print(result,eval(result), sep='=')
2.2 split
- 字符串1.split(字符串2) - 将字符串1中所有的字符串2作为切割点对字符串进行切割,返回一个包含多个字符串的列表
- 字符串1.split(字符串2, N) - 将字符串1中前N个字符串2作为切割点对字符串进行切割,返回一个包含多个字符串的列表
str1 = 'abc123hello123你好123python'
result = str1.split('123')
print(result) # ['abc', 'hello', '你好', 'python']
# 注意:如果切割点在字符串开头,或者字符串结尾,或者连续出现多个切割点都会产生空串
# n个切割点,一定产生n + 1个分段
str1 = '123abc123hello123你好123python'
print(str1.split('123')) # ['', 'abc', 'hello', '你好', 'python']
str1 = 'abc123hello123你好123python'
result = str1.split('123', 2)
print(result) # ['abc', 'hello', '你好123python']
2.3 replace - 替换
- 字符串1.replace(字符串2,字符串3) - 将字符串1中所有的字符串2都替换成字符串3
- 字符串1.replace(字符串2,字符串3, N) - 将字符串1中前N个字符串2都替换成字符串3
str1 = 'how are you! Im fine, Thank you!'
# you -> me
result = str1.replace('you', 'me')
print(result) # how are me! Im fine, Thank me!
2.4 strip
- 字符串.strip() - 去掉字符串前后的空白字符串
- 字符串.strip(字符)
print('--------------------优雅转场,华丽分割-------------------')
str1 = ' \t \n good good study \n '
print(str1)
print('--------------------优雅转场,华丽分割-------------------')
result = str1.strip()
print(result)
print('--------------------优雅转场,华丽分割-------------------')
str2 = '//good good study'
result = str2.strip('/')
print(result) # good good study
2.5 count
字符串1.count(字符串2) - 统计字符串1中字符串2出现的次数
str1 = 'how are you! Im fine, Thank you!'
print(str1.count('you')) # 2
print(str1.count('a')) # 2
2.6 maketrans, translate
-
str.maketrans(字符串1, 字符串2) - 通过字符串1和字符串2创建替换对应关系表
-
字符串.translate(对应关系表) - 按照对应关系表将字符串中字符进行替换
table = str.maketrans('abc', '123') # a-1, b-2, c-3
str1 = 'ajkfbbkfjdccab'
print(str1.translate(table)) # 1jkf22kfjd3312
2.7 center,ljust,rjust, zfill
- 字符串.center(长度,字符) - 将指定字符串变成指定长度,不够的用指定字符填充;原字符串放中间
- 字符串.ljust(长度,字符) - 将指定字符串变成指定长度,不够的用指定字符填充;原字符串放左边
- 字符串.rjust(长度,字符) - 将指定字符串变成指定长度,不够的用指定字符填充;原字符串放右边
- 字符串.zfill(长度) == 字符串.rjust(长度, ‘0’)
str1= 'abc'
print(str1.center(7, 'x')) # 'xxabcxx'
print(str1.ljust(7, 'x')) # 'abcxxxx'
print(str1.rjust(7, 'x')) # 'xxxxabc'
print(str1.center(2, 'x')) # 'abc'
num = '123'
print(num.zfill(6)) # 000123
2.8 find, index
- 字符串1.find(字符串2) - 获取字符串2在字符串1中第一次出现的位置,如果字符串2不存在返回-1
- 字符串1.index(字符串2) - 获取字符串2在字符串1中第一次出现的位置,如果字符串2不存在报错
- 字符串1.rfind(字符串2)
- 字符串1.rindex(字符串2)
str1 = 'how are you! Im fine, Thank you!'
print(str1.find('you')) # 8
print(str1.index('you')) # 8
print(str1.find('youu')) # -1
# print(str1.index('youu')) # 报错
print(str1.rfind('you')) # 28,从后往前找,输出位置是从前往后数
2.9 isdigit,isnumeric - 判断是否是纯数字字符串
- 字符串.isdigit() - 判断字符串中是否全是数字字符(0-9)
- 字符串.isnumeric() - 判断字符串中是否是具有数字意义的字符
tr1 = '2342'
print(str1.isdigit()) # True
print(str1.isnumeric()) # True
str1 = '2345一四千百'
print(str1.isdigit()) # False,只能是0-9数字
print(str1.isnumeric()) # True,可以是表示数字的一个字符,多个字符表示的不行
print('k'.islower()) # 判断字符是否是小写
print('A'.isupper())
三. 格式字符串
# name = input('请输入姓名:')
# age = int(input('请输入年龄:'))
name = 'li'
age = 23
# 问题:写代码的时候可能会出现一个字符串中的部分内容无法确定
# xxx今年xxx岁
# 方法1:字符串拼接
str1 = name + '今年' + str(age) + '岁!'
print(str1)
3.1 格式占位符创建字符串
-
语法:包含格式占位符的字符串%(数据1, 数据2, 数据3,…)
-
注意:后面括号中的数据必须和前面字符串中的占位符一一对应
-
常用的格式占位符:
%s - 字符串占位符,可以对应任何类型的数据
%d - 整数占位符,可以对应任何数字
%f - 浮点数占位符,可以对应任何数字
%.Nf - 保留N位小数
# 方法2:格式占位符
str1 = '%s今年%d岁!' % (name, age)
print(str1)
str1 = '%s今年%d岁,月薪:%.2f元!' % (name, age,10000)
print(str1)
price = 34.5445
str2 = '价格:%s' % price
print(str2) # 价格:34.5445
str2 = '价格:%d' % price
print(str2) # 价格:34
str2 = '价格:%f' % price
print(str2) # 价格:34.544500
3.2 f-string
- 语法:在字符串最前面加f,就可以在字符串中通过’{数据}'来提供字符串中变化的部分
# 方法3:使用f-string
str1 = f'{name}今年{age}岁!'
print(str1)
name = '小明'
str1 = '{name}'
print(str1) # {name}
str1 = f'{name}'
print(str1) # 小明
str1 = f'{name * 2}'
print(str1) # 小明小明
str1 = f'{name[1] * 2}'
print(str1) # 明明
str1 = f'{name} == {age + 10}'
print(str1) # 小明 == 33
score = [90, 89, 67]
str1 = f'{name}三门学科的分数:{str(score)[1:-1]}'
print(str1) # 小明三门学科的分数:90, 89, 67
加参数:{表达式:参数}
a.控制小数位数的参数:{表达式:.Nf}
money = 17283
str1 = f'年薪:{money * 13:.2f}'
print(str1) # 年薪:224679.00
b.显示百分比:{表达式:.N%}
rate = 0.87
str1 = f'班级及格率:{rate}'
print(str1) # 0.87
str1 = f'班级及格率:{rate:%}'
print(str1) # 班级及格率:87.000000%
str1 = f'班级及格率:{rate:.2%}'
print(str1) # 班级及格率:87.00%
c.逗号显示金额
eg:1,000 18,234,243,344
money = 143444
str1 = f'年薪:{money * 13:,}元'
print(str1) # 年薪:1,864,772元
money = 143444
str1 = f'年薪:{money * 13:,.2f}元'
print(str1) # 年薪:1,864,772.00元
d.修改填充内容的长度:{表达式:字符>长度},{表达式:字符<长度},{表达式:字符^长度},字符不用加’’
num = 23
str1 = f'python2202{num:0>4}'
print(str1) # python22020023
str1 = f'python2202{num:x<4}'
print(str1) # python220223xx
str1 = f'python2202{num:a^4}'
print(str1) #python2202a23a