1.字符串补充
1.格式字符串:字符串中通过 ‘格式站位符’ 来表示字符串中变化的部分
- 格式:一个包含格式站位符的字符串%(给格式站位符赋值的列表)
格式站位符:%s - 字符串占位
%d - 整数
%.Nf - 浮点数 可以使用N约束后面的小数位数
%c - 字符 输入一个字符,
如果输入数字,则会将其作为编码转化为字符
%x/%X - x整数(16进制)
name = 'sss'
age = 23
sex = '男'
message = '%s今年%d岁, 性别:%c' % (name, age, sex)
print(message)
# 输入学生姓名 年龄 性别 以xx今年x岁,性别x的格式打印
2.常用对象方法
- str1.count(str2)
count()统计str2 在str1中出现的次数 - str1.find(str2, 开始下标, 结束下标)
返回str2在str1中指定范围内首次出现 起始位置的下标值,没有则返回-1
str1 = ' hao are you '
print(str1.find('are', 3, 5))
- join 字符串.join(序列)
将序列中的元素(字符串)用字符串1连接在一起, 产生一个新的字符串
print('$'.join('abc'))
print('++'.join(['aa', 'ee', 'ss']))
print(str1.strip(), str1)
- 字符串1.split(字符串2) 在字符串1中把字符串2当做切点,
分割字符串1,产生的新各个字符串用列表保存
str2 = 'how are you?0h~'
s_print = ''
#统计str2中所有元素出现的次数
for s in str2:
if s not in s_print:
print(s, str2.count(s))
s_print += s
#求字符串中出现次数最多的字符 及出现次数
max_count = 0
max_s = ''
for s in str2:
count = str2.count(s)
if count > max_count:
max_count = count
max_s = s
#找出字符串中指定字符串出现的下标并打印
str3 = 'and you how are you?0h~'
str4 = 'you'
start_index = 0
while True:
index = str3.find(str4, start_index)
if index == -1:
break
else:
print(index, end=',')
start_index = index + len(str4)
print()
练习:实现join的功能 用字符串1 将字符串2中所有的字符连接起来
str5 = 'aa'
str6 = '123444'
new_str = ''
for char in str6:
new_str += char + str5
new_str = new_str[:-len(str5)]
print(new_str)
#取出数字并用字符拼接
str5 = '+'
str6 = 'asd235dsdsg55'
new_str = ''
for char in str6:
if '0' <= char <= '9':
new_str += char + str5
new_str = new_str[:-len(str5)]
print(new_str)
2.list列表
- 什么时候用列表:需要用一个变量保存多个程序
什么是列表
列表是python内置的容器型数据类型(序列),可变(支持增删改)且有序(支持通过下标操作)
用中括号将多个元素括起来,多个元素用逗号隔开:[元素1,元素2,元素3....]列表中的元素:python内置数据类型对应的数据,或者自定义的类型数据都可以
- 不同元素类型可以不一样
list1 = [120, 12.9, True, 'abc', [1, 2, 3], lambda x: x*10]
print(list1)
num = 10
# 注意:赋值运算不能作为元素,其他都可以将结果作为元素存贮在列表中
list2 = [num, 100+200]
3.查 - 获取列表元素 同字符串
# 获取单个元素:列表[下标]
names = ['海贼王', '火影忍者', '死神', '犬夜叉', '妖精']
print(names[0])
# 获取部分元素-切片(同字符串):列表[开始下标:结束下标:步长]
# 列表切片结果是列表
print(names[1:4])
print(names[:]) #属于浅拷贝
- 遍历
a.直接遍历
for 变量 in 列表: 变量取到元素
循环体
b. 通过下标遍历
for 变量 in range(len(列表)): 变量取到下标
循环体
#遍历元素
for item in names:
print(item)
#遍历索引
for index in range(len(names)):
print(index, names[index])
#统计平均分和不及格人数
scores = [90, 80, 54, 40, 70, 57, 54]
sum_score = 0
notPass = 0
for score in scores:
sum_score += score
if score < 60:
notPass += 1
print('平均分%.2f,不及格%d人' % (sum_score/len(scores), notPass))
补充求和函数 sum
sum(序列) - 求序列中所有元素的和;
序列要求元素类型一致,且支持加法运算
print(sum(scores), sum(range(101)))
- 增 - 添加元素
# 列表.append(元素) - 在指定列表的最后添加元素
persons = ['路费', '宝儿姐', '张楚楠']
persons.append('容嬷嬷')
persons.append('赵云')
print(persons)
# 2.列表.insert(下标, 元素) -在指定列表的 指定下标前 插入指定元素
numbers = [1, 20, 34, 50]
numbers.insert(2, 22)
print(numbers)
# 练习:输入一个数字,然后将其添加到一个有序列表中,要求加入后不改变其排列顺序
numbers = [1, 20, 34, 50, 100, 200, 1000]
num = 10
for index in range(len(numbers)):
if numbers[index] > num:
numbers.insert(index, num)
break
else:
numbers.append(num)
print(numbers)
- 删除元素
# del 列表[下标] - 将指定列表中指定下标对应元素删除
numbers = [1, 20, 34, 50, 100, 200, 1000]
del numbers[2]
print(numbers)
# 列表.remove(元素) - 将指定列表中第一个指定元素删掉,如元素不存在,会报错
names.remove('海贼王')
print(names)
# 列表.pop() -移除列表中最后一个元素
# 列表.pop(下标) -移除列表中指定对应下标的元素
# 会返回移除的元素
del_name = names.pop()
print(names, del_name)
del_name = names.pop(0)
print(names, del_name)
names = ['海贼王', '火影忍者', '死神', '海贼王', '犬夜叉', '海贼王', '妖精']
# 删除所有的海贼王,remove, del pop
while True:
if '海贼王' in names:
names.remove('海贼王')
else:
break
# 清空 列表.clear() 删除列表中所有元素 保留空列表
- 改 - 修改列表中的元素
#列表[下标] = 新值 将列表中,指定下标对应元素,改成新值
nums = [1, 2, 3]
nums[0] = 100
print(nums)
- in/not in
# 元素 in 列表 判断列表中是否包含指定元素
print(['b', 'a'] + ['a'])
# remove, append, insert没有返回值
9.补充删除列表遍历的规则
scores = [10, 50, 90, 89, 89, 89, 40, 10]
# 删除所有小于60的数
# 按元素遍历:通过remove删除的时候可能出现 删不干净的问题
for score in scores:
if score < 60:
scores.remove(score)
print(scores)
# 解决思路
# 先备份一份
socore2 = scores.copy()
# 遍历备份,操作原本
# 问题2, 通过下标遍历删除满足要求的元素时,出现下标越界
for index in range(len(scores)):
if scores[index] < 60:
del scores[index]
print(scores)
#将range(len(scores))产生的序列计算后保存起来,按此遍历,
# 后续len()的改变不会对保存的序列操作,
# 解决问题2 , 如果删除操作执行,index不能改变
index = 0
while index < len(scores):
if scores[index] < 60:
del scores[index]
continue
index += 1