字符串是容器型数据,里面的元素都是字符[长度为1的字符串]
'a' 'b' ' ' '0'
不可变的有序序列
s = 'hello everyone' # 获取元素个数 print(len(s)) # 可以通过下标 获取字符 print(s[0]) print(s[-1]) print(s[:3]) print(s[-3:]) # s[0] = 'H' # TypeError: 'str' object does not support item assignment
获取的操作
1. 字符串数据.find(子串)
查找子串第一次出现的位置
2. 字符串数据.rfind(子串)
查找子串最后一次出现的位置
3. 字符串数据.count(子串)
统计子串出现的次数
s = 'hello everyone' pos = s.find('e') print(pos) # 1 pos = s.rfind('e') print(pos) # 13 count = s.count('e') print(count)
转换的操作
将字符串中的相关符号进行转换 【因为字符串不可变 产生的数据是影响不了原本的数据 都是产生的是一个新的数据】
字符串数据.upper() 将字母变大写
字符串数据.lower() 将字母变小写
字符串数据.swapcase() 将大写变小写 将小写变大写
字符串数据.title() 每个单词首字母大写 【单词:没连接在一起的就视作一个新的单词】
字符串数据.capitalize() 首字母大写 其他小写
s = 'hello everyone' new_s = s.upper() print(s, new_s) new_s1 = new_s.lower() print(new_s1) new_s2 = new_s.title() print(new_s2) # Hello Everyone new_s3 = new_s2.swapcase() print(new_s3) new_s4 = new_s3.capitalize() print(new_s4)
判断的操作
1. 是否以指定内容开头
字符串数据.startswith(指定内容)
2. 是否以指定内容结尾
字符串数据.endswith(指定内容)
3. 判断是否是纯数字
字符串数据.isdigit()
4. 判断字符串的内容是否为纯字母
字符串数据.isalpha()
5. 判断字符串的内容是否为数字或字母
字符串数据.isalnum()
6. 判断字符串中的字母是否为大写
字符串数据.isupper()
7. 判断字符串中的字母是否为小写
字符串数据.islower()
s = 'Hello Everyone' print(s.startswith('H')) print(s.endswith('one')) print(s.isalnum()) # False print(s.isalpha()) # False print(s[0].isupper()) # True print(s[-3:].islower()) # True print('123'.isdigit()) print('abc12'.isdigit())
案例
#1.遍历字符串 提取其中的数字符号 data='hello my age is 18, my birthday is September 5th.' digit_s = '' for i in data: if i.isdigit(): digit_s =digit_s +i print(digit_s) #2.将字符串中首字母大写 其他小写 print(data.capitalize()) #3.统计字符串中a出现的次数 print(data.count('a')) #4.查找is第一次出现的位置 并从这个位置一直提取到最后 print(data .find('is')) print(data [data.find('is'):])
字符串的切割与拼接
切割:
字符串数据.split(切割符)
将指定切割符为切割点 把字符串分成N份, 结果是一个列表 存储多个子串
拼接:
'拼接符'.join(容器型数据)
使用拼接符将容器中的元素拼接在一起
注意:容器中的元素必须是字符串类型的 底层实现的时候 使用的是 +号运算
+在字符串中完成的字符串拼接 只能拼接字符串类型的
print(data) print(data.split(' ')) # ['hello', 'my', 'age', 'is', '18,', 'my', 'birthday', 'is', 'September', '5th.'] print(data.split('e')) nums = [18, 34, 56, 71, 29] # 使用+号将其拼接在一起 # print('+'.join(nums)) # TypeError: sequence item 0: expected str instance, int found # 人家期待的是字符串 但是获取的却是整型 # 拼接之前转化成字符串 # str(nums) # 将传进的数据转化为字符串 ====> '[18, 34, 56, 71, 29]' str_nums = [str(ele) for ele in nums] # ['18', '34', '56', '71', '29'] print('+'.join(str_nums)) # 18+34+56+71+29
字符串格式化
在指定宽度中居中显式 字符串.center(宽度, 占位符)
在指定宽度中居左显式 字符串.ljust(宽度, 占位符)
在指定宽度中居右显式 字符串.rjust(宽度, 占位符)
s = 'hello' print(s.center(10, '*')) print(s.ljust(10, '*')) print(s.rjust(10, '*'))
将未知的数据格式化拼接在字符串文本中
目的:将非字符串类型的数据与字符串类型的数据进行拼接
# + 可以让字符串进行拼接 但是只能字符串类型的数据 # print('年龄' + 17) # TypeError: can only concatenate str (not "int") to str # 只能字符串与字符串进行拼接
方式1 将数据转化为字符串类型
print('年龄' + str(17))
方式2: 使用字符串中 % 运算符 【% 在数字运算是取余】
先生成文本 在未知的位置使用占位进行占位,再对字符串进行%, 给占位的符号赋值
占位符:
%s --- 可以填充任意类型的数据
%d --- 填充的是整型数据
可以单独再进行格式化操作
%0nd === n代表的是数字显式的宽度 不足n位 左边补充0
%05d ====> 10 ====> 显式的时候 为 00010
%f --- 填充的浮点型数据
可以再单独格式化
%.nf === n代表的是保留小数的位数
%.3f ====> 3.1415926 ===>显式为 3.142
year = 2020 month = 4 if month in (4, 6, 9, 11): day = 30 elif month in (1, 3, 5, 7, 8, 10, 12): day = 31 else: if (year % 4 == 0 and year % 100 != 0) or (year % 400 == 0): day = 29 else: day = 28 # 有几个占位符 就赋予几个值 值和占位符之间是一一对应的 content = '%s年%s月有%s天' % (year, month, day) print(content) # 学号 显式的时候按照6位来显式 sid = 1 # 姓名 name = '张三' # 年龄 age = 17 # 成绩 显式的时候保留一位小数 score = 89.65 info = '学号为%06d的%s,年龄是%s, 考试成绩为%.1f' % (sid, name, age, score) print(info)
方式3: 字符串数据.format()
先生成字符串文本数据,未知数据的地方使用 {}进行占位 调用字符串的format操作 给占位符进行赋值
有几个占位符 传递就有几个值
如果对数据有特殊的格式 在{}操作
{:0nd} 按照n位填充
{:.nf} 保留n位小数
info1 = '学号为{:06d}的{}, 年龄是{}, 考试成绩为{:.1f}'.format(sid, name, age, score) print(info1)
方式4: 是方式3的简化 使用f修饰字符串
f修饰完字符串 可以直接在{}的位置填充对应的数据值
要修饰数据 {数据:0nd} {数据:.nf}
info2 = f'学号为{sid:06d}的{name}, 年龄是{age}, 考试成绩是{score:.1f}' print(info2)