Day3
又见str
-索引
str h e l l o
索引 0 1 2 3 4
- 贴片操作(顾头不顾尾)
s=‘Hello’
s[1:3]
out:‘He’
s[2:4]
out:‘ll’
- 字符串不可变
对某个字符串如str重新赋值时,没有改变str本身,只是改变了str指向的地址,即给新值提供新地址,让str指向新地址。旧地址会被解释器定时回收。
-字符串常用操作
a=“Hello world”
str.center(整数,间隔符号)
str.count(要查找的字符,开始索引数,结束索引数)
str.endwith(a) #检验字符串str是否以a为结尾,返回true 或者 false
str.startwith(a) #检验开头,与以上类似
str.find(a) #字符查找,返回-1表示没找到,若找到,则返回索引
str.isdigit() #判断str是否是数字形式的字符串,如’1’
b=[“g”,“c”,“t”] ;“连接符”.join(b) out:g连接符c连接符t
a.replace(“l”,“M”) #用M替换a中原来所有的l
a.replace(“l”,“M”,1) #用M替换a中前1个l
a.split(" ") #用空格作为分隔符分开a out:[“Hello”,“world”]
又见list
定义
特点(索引)
插入:
1.list.append(需要添加的内容)
2.list.insert(索引,需要添加的内容)
3.list1.extend(list2) (把list2合并到list1的末尾)
4.list1.insert(索引,list3)
删除:
1.del list[索引] 直接删除
2.list.pop() #默认删除最后一个元素并返回被删除的值
3.list.pop(索引) #删除指定元素 tips:若要删除倒数第n个,则索引为-n
4.list.remove(“a”) #删除第一个找到的a值
5.list.clear() #清空
修改
查找:
1.list.index(“a”) #返回从左开始匹配到的第一个a的索引
2.list.cout(“a”) #返回a的个数
切片
1.list[1:4] #取索引1-3的内容
2.list[:4] #取索引0-3的内容
3.list[4:] #取索引4-末尾的内容
4.list[-5:-1] #取倒数第五-倒数第二的内容
5.list[-5:] #取倒数第五-倒数第一的内容
6.list[0👎2] #取从第零个索引一直到倒数第二个索引,但步长为2来取,即取索引为0,2,4,6…的值
7.list[0::2] #以步长为2从0到最右取相应索引的值
排序
list.sort()
tips:排序顺序为大写英文字母、小写、中文
反转
list.reverse() #把列表左右翻转
循环列表
list=["a","b","c"]
for i in list:
print (i)
out:
a
b
c
即打印了每一个list中的元素。
打印索引与list元素:
list=["a","b","c"]
for i in enumerate(list): #enumerate为枚举
print (i)
out:
(0, ‘a’)
(1, ‘b’)
(2, ‘c’)
list=["a","b","c"]
for i in enumerate(list): #enumerate为枚举
print (i[0],i[1])
out:
0 a
1 b
2 c
班级成绩排序小程序
需求:把[班级成员,成绩]列表按五个成绩等级重新排列。
stu_list=[["a",97],["b",50],["c",70],["d",59],["e",88],["f",100],["g",79],["h",65]]
new_stu_list=[
[],
[],
[],
[],
[]]
for i in stu_list:
if i[1]>90 and i[1]<=100:
new_stu_list[0].append(i)
elif i[1]>80 and i[1]<=90:
new_stu_list[1].append(i)
elif i[1]>70 and i[1]<=80:
new_stu_list[2].append(i)
elif i[1]>60 and i[1]<=70:
new_stu_list[3].append(i)
else:
new_stu_list[4].append(i)
for k in range(5):
print(new_stu_list[k])
out:
[[‘a’, 97], [‘f’, 100]]
[[‘e’, 88]]
[[‘g’, 79]]
[[‘c’, 70], [‘h’, 65]]
[[‘b’, 50], [‘d’, 59]]
不足:如果每个成绩等级里也可以排序则更佳
字典
定义
- 结构
{key1:value1,key2:value2}
- key必须为不可变数据类型(字符串、数字),必须唯一(若key不唯一,则后面的key及相应的value会覆盖之前的同名的key)
- 可存放任意多个value、可修改、可以不唯一
- 无序
- 查询速度快,且不受dict的大小影响。(与hash有关)
操作
-
增加
dict[key]=value -
删除
del dict[key]
dict.pop(key) #与list类似
dict.clear() -
修改
与普通变量赋值方式相同 -
取值
dict[key]
out:value -
查询
查询key是否在dict中:key in dict
查询dict中所有的keys: dict.keys()
查询dict中所有的values: dict.values()
把dict中的每一对key-value变成列表中的元素(类似):dict.items() -
循环
单独取key value:#与list最后类似
- for k in dict.keys()
for k,v in dic.items():
print(k,v)
3.#推荐使用这种这种速度快
for k in dict :
print(k,dict[k])
求长度
len(dict)
嵌套
练习
快递分拣小程序:
#共452条记录
list = [
['王*龙', '北京市海淀区苏州街大恒科技大厦南座4层'],
['庞*飞', '北京市昌平区汇德商厦四楼403'],
['顾*锐', '江苏省扬州市三垛镇工业集中区扬州市立华畜禽有限公司'],
['王*飞', '上海市徐汇区上海市徐汇区H88越虹广场B座5E'],
['华*升', '北京市海淀区杰睿大厦'],
['朱*锴', '上海市浦东新区川沙新镇华川家园33号楼503'],
['陈*盼', '浙江省杭州市闲林街道,西溪华东园,十幢一单元401。'],
['司*鹏', '河南省鹤壁市淇滨大道310号 鹤壁京立医院'],
['聂*睿', '河北省石家庄市中山路勒泰中心写字楼b座11层'],
['张*', '辽宁省本溪市明兴丽城九号楼四单元'],
['冉*晗', '河北省石家庄市体育南大街385号'],
['高*杰', '北京市朝阳区广渠路42号院3号楼,408'],
['李*国', '安徽省合肥市新站区淮合花园'],
['常*源', '江苏省南京市白下路242号,南京市红十字医院,放射科'],
['张*玉', '河北省沧州市新居然家居广场'],
['王*川', '上海市奉贤区南桥镇 贝港七区'],
['冀*庆', '河北省保定市河北大学坤兴园生活区'],
['胡*晨', '浙江省宁波市浙江省宁波市江东区中山首府A座2004室'],
['尹*婷', '湖北省武汉市武汉大学信息学部'],
['李*东', '辽宁省大连市大关一街3号3-3-1'],
['张*', '天津市河西区隆昌路94号(天津科技馆)'],
['刘*', '湖北省黄冈市城关镇'],
['阿*亚', '内蒙古省呼和浩特市包头东接民望家园1区3号楼2单元1501'],
['孙*云', '山东省济南市山东省济南市历下区祥泰汇东国际,一号楼3005室'],
['曹*亮', '黑龙江省大庆市服务外包产业园D1'],
['侯*琦', '上海市长宁区金钟路凌空soho16号楼3楼'],
['郭*峰', '河南省商丘市高新技术开发区恒宇食品厂'],
['赵*生', '河北省唐山市朝阳道与学院路路口融通大厦2408室'],
['张*', '陕西省咸阳市文汇东路6号西藏民族大学'],
['刘*民', '北京市大兴区南海家园四里7号楼1单元902'],
['郭*兰', '湖北省武汉市湖北省'],
['张*强', '河北省张家口市经开区钻石南路11号'],
['鞠*龙', '山东省潍坊市玉清街江山帝景B区12号楼一单元14楼'],
['李*', '北京市海淀区西二旗智学苑5号楼超市'],
['许*康', '北京市西城区西单北大街甲133号'],
['叶*生', '江苏省扬州市扬子江中路756号'],
['赵*兴', '北京市海淀区西二旗上地信息路1号金远见大楼华纬讯301'],
['徐*革', '北京市海淀区闵庄路3号102栋二层206'],
['徐*', '安徽省淮南市金荷小区(金格商场旁)'],
['雷*', '北京市朝阳区望京街道望京sohoT1C座1201'],
['庄*', '浙江省杭州市恒生电子大厦'],
['蔡*恩', '湖北省武汉市仁和路沙湖港湾B区1103'],
['陈*', '江苏省苏州市巴城镇湖滨北路193号牛吃蟹庄'],
['黄*', '北京市朝阳区霄云路26号鹏润大厦A座33层'],
['魏*飞', '河北省石家庄市新石北路与红旗大街交口开元大厦502室'],
['张*', '山东省济南市兴港路三庆城市主人'],
['段*琪', '山西省临汾市福利路尧乡小区'],
['刘*', '北京市昌平区龙禧三街骊龙园601'],
['王*生', '上海市杨浦区邯郸路复旦大学遗传学楼319室'],
['王*君', '江苏省扬州市叶挺路318号建行营业部'],
['王*义', '北京市东城区环球贸易中心D座'],
['李*', '陕西省汉中市同沟寺镇晨光村二组'],
['裴*宇', '吉林省四平市岭西新耀豪庭7栋'],
['丁*', '山东省烟台市大季家镇芦洋村'],
['刘*铎'