008 列表list[]、元组tuple()、字典dict{}、集合set[]、字符串
本节内容
- 列表list []
- 元组tuple () 只读
- 字典dict {} 键值对
- 集合set []无序、去重
- 字符串
- 作业(多级菜单)
一、列表list[]
列表属性
- 切片:取多个元素 names[1:4]
- 追加 names.append("我是新来的")
- 插入 names.insert(5,"从eric后面插入试试新姿势")
- 修改 names[2] = "该换人了"
- 删除 del names[2]
- 扩展 names.extend(b)
- 拷贝 name_copy = names.copy()
- 统计 names.count("Amy")
- 排序&翻转 names.sort() 、names.reverse()
- 获取下标 names.index("Amy")
创建列表:
name_list = ['dream', 'seven', 'eric']
或
name_list = list(['dream', 'seven', 'eric'])
基本操作:索引、切片、追加、删除、长度、切片、循环、包含

# 打印列表的索引号的序号:
f=[3,1,4,5,6,2,8,9]
for index,line in enumerate(f):
print(index,line)
二、元组tuple(只读列表)()
元组tuple用小括号()表示,与列表的区别在于:
1)元组不可以直接修改
2)元组含有列表大部分方法,除append、extend、insert
3)元组可以用小括号或不用括号表示,t=('a','b')和t='a','b' 一样
4)为只读列表,它只有2个方法,一个是count,一个是index。
创建元组:
ages = (11, 22, 33, 44, 55)
或
ages = tuple((11, 22, 33, 44, 55))
三、字典dict{}
特征:
- 特性:
- 无顺序
- 去重
- 查询速度快,比列表快多了
- 比list占用内存多
创建字典:
person = {"name": "mr.wu", 'age': 18}
或
person = dict({"name": "mr.wu", 'age': 18})
bob ={"firstName":"Robert","lastName":"Smith","age":19}
print(bob["firstName"],bob["lastName"],"is",bob["age"],"years old.")
PhoneNum={"Sam":2345678,"Ted":5436666,"Joe":4443456}
name=input("Enter a person's name:")
print(name + "'s phone number is",PhoneNum[name])
band={6:"six","instrument":"Tromnone",7:"seventy"}
print(band[7].capitalize()+'-'+band[6],band["instrument"]+"s")
常用操作:
- 索引
- 新增
- 删除
- 键、值、键值对
- 循环
- 长度

增加 info["stu1104"] = "苍井空"
修改 info['stu1101'] = "武藤兰"
删除 info.pop("stu1101") #标准删除姿势
del info['stu1103'] #换个姿势删除
info.popitem() #随机删除
查找 "stu1102" in info #标准用法
info.get("stu1102") #获取
info["stu1102"] #同上,但是看下面
info["stu1105"] #如果一个key不存在,就报错,get不会,不存在只返回None
多级字典嵌套及操作:
av_catalog = { "欧美":{ "www.youporn.com": ["很多免费的,世界最大的","质量一般"], "www.pornhub.com": ["很多免费的,也很大","质量比yourporn高点"], "letmedothistoyou.com": ["多是自拍,高质量图片很多","资源不多,更新慢"], "x-art.com":["质量很高,真的很高","全部收费,屌比请绕过"] }, "日韩":{ "tokyo-hot":["质量怎样不清楚,个人已经不喜欢日韩范了","听说是收费的"] }, "大陆":{ "1024":["全部免费,真好,好人一生平安","服务器在国外,慢"] } } av_catalog["大陆"]["1024"][1] += ",可以用爬虫爬下来" print(av_catalog["大陆"]["1024"]) #ouput ['全部免费,真好,好人一生平安', '服务器在国外,慢,可以用爬虫爬下来']
其它姿势
#values >>> info.values() dict_values(['LongZe Luola', 'XiaoZe Maliya']) #keys >>> info.keys() dict_keys(['stu1102', 'stu1103']) #setdefault >>> info.setdefault("stu1106","Alex") 'Alex' >>> info {'stu1102': 'LongZe Luola', 'stu1103': 'XiaoZe Maliya', 'stu1106': 'Alex'} >>> info.setdefault("stu1102","龙泽萝拉") 'LongZe Luola' >>> info {'stu1102': 'LongZe Luola', 'stu1103': 'XiaoZe Maliya', 'stu1106': 'Alex'} #update >>> info {'stu1102': 'LongZe Luola', 'stu1103': 'XiaoZe Maliya', 'stu1106': 'Alex'} >>> b = {1:2,3:4, "stu1102":"龙泽萝拉"} >>> info.update(b) >>> info {'stu1102': '龙泽萝拉', 1: 2, 3: 4, 'stu1103': 'XiaoZe Maliya', 'stu1106': 'Alex'} #items info.items() dict_items([('stu1102', '龙泽萝拉'), (1, 2), (3, 4), ('stu1103', 'XiaoZe Maliya'), ('stu1106', 'Alex')]) #通过一个列表生成默认dict,有个没办法解释的坑,少用吧这个 >>> dict.fromkeys([1,2,3],'testd') {1: 'testd', 2: 'testd', 3: 'testd'}
循环dict
#方法1 for key in info: print(key,info[key]) #方法2 for k,v in info.items(): #会先把dict转成list,数据里大时莫用 print(k,v)
四、集合set(不允许重复)[]
集合是一个无序的,不重复的数据组合,它的主要作用如下:
- 去重,把一个列表变成集合,就自动去重了
- 关系测试,测试两组数据之前的交集、差集、并集等关系
集合推导union、intersection、difference
set1={x * x for x in range(-5,4)}
set2={x * x for x in range(-3,3)}
print(set1,'\n',set2)
print(set1.union(set2))#set1和set2的并集
print(set1.intersection(set2))#set1和set2的交集
print(set1.difference(set2))#set1中排查与set2的交集
集合推导:{x * x for x in range(-3,3)}
集合操作方法add,discard,clear,set
words={"spam","ni"}
words.add("eggs")
print(words)
words.discard("ni") # 这里好像不能用{}
print(words)
words.clear()
print(words)
words=set([3,7,3])
print(words)
words=set((7,3,4,3))
print(words)
sorted(words,reverse=False)
print("sorted后:",words)
常用操作:
s = set([3,5,9,10]) #创建一个数值集合 t = set("Hello") #创建一个唯一字符的集合 a = t | s # t 和 s的并集 b = t & s # t 和 s的交集 c = t – s # 求差集(项在t中,但不在s中) d = t ^ s # 对称差集(项在t或s中,但不会同时出现在二者中) 基本操作: t.add('x') # 添加一项 s.update([10,37,42]) # 在s中添加多项 使用remove()可以删除一项: t.remove('H') len(s) set 的长度 x in s 测试 x 是否是 s 的成员 x not in s 测试 x 是否不是 s 的成员
s.issubset(t) s <= t 测试是否 s 中的每一个元素都在 t 中 s.issuperset(t) s >= t 测试是否 t 中的每一个元素都在 s 中 s.union(t) s | t 返回一个新的 set 包含 s 和 t 中的每一个元素 s.intersection(t) s & t 返回一个新的 set 包含 s 和 t 中的公共元素 s.difference(t) s - t 返回一个新的 set 包含 s 中有但是 t 中没有的元素 s.symmetric_difference(t) s ^ t 返回一个新的 set 包含 s 和 t 中不重复的元素 s.copy() 返回 set “s”的一个浅复制
五、字符串
在“009 数据类型及数据运算及格式化输出format ”章节再次介绍。https://www.cnblogs.com/wzh313/articles/9161610.html
字符串拼接:
python中的字符串在C语言中体现为是一个字符数组,每次创建字符串时候需要在内存中开辟一块连续的空,并且一旦需要修改字符串的话,就需要再次开辟空间,万恶的+号每出现一次就会在内从中重新开辟一块空间。
字符串格式化输出
name = "dream"
print("i am %s " % name)
PS: 字符串是 %s;整数 %d;浮点数%f
#基础部分 name='dRe吴am' print(name.capitalize()) #首字母大写 print(name.casefold())#大写全部变小写 print(name.center(50,"-"))#输出 '----------------------dReam-----------------------' print(name.count('ea')) #统计ea出现次数 print(name.encode())#将字符串编码成bytes格式"b'dRe\xe5\x90\xb4am'" print(name.endswith("am")) #判断字符串是否以am结尾 print("dRe\t吴am".expandtabs(10))#输出'dRe 吴am', 将\t转换成多长的空格 print(name.find('am'))#查找am,找到返回其索引, 找不到返回-1 name.index('a') #返回a所在字符串的索引 '9aA'.isalnum() #True '9'.isdigit() #是否整数 print(name.isnumeric()) print(name.isprintable()) print(name.isspace()) print(name.istitle()) print(name.isupper()) print("|".join(['alex','jack','rain'])) print('alex|jack|rain') # format和format_map msg = "1my name is {}, and age is {}" print(msg.format("Dream",21)) msg = "2my name is {1}, and age is {0}" print(msg.format("Dream",21)) msg = "3my name is {name}, and age is {age}" print(msg.format(age=21,name="Dream")) msg = "4my name is {name}, and age is {age}" print(msg.format_map({'name':'Dream','age':21})) #maketrans intab = "aeiou" #This is the string having actual characters. outtab = "12345" #This is the string having corresponding mapping character trantab = str.maketrans(intab, outtab) str = "this is string example....wow!!!" str.translate(trantab) print(intab) print(outtab) print(str) print(str.translate(trantab)) msg = "my name is {}, and age is {}" n4="Hello 2orld" print(msg.partition('is')) #输出('my name ', 'is', ' {}, and age is {}') print("Dream, chinese name is Memory".replace("ea","EA",1)) msg.swapcase #大小写互换 msg.zfill(40) '00000my name is {name}, and age is {age}' n4.ljust(40,"-")#'Hello 2orld-----------------------------' n4.rjust(40,"-")#'-----------------------------Hello 2orld' b="ddefdsdff_哈哈" b.isidentifier() #检测一段字符串可否被当作标志符,即是否符合变量命名规则
六、作业(多级菜单)
作业:多级菜单
- 三级菜单
- 可依次选择进入各子菜单
- 所需新知识点:列表、字典
例如:
- 打印省、市、县三级菜单
- 可返回上一级
- 可随时退出程序
menu = { '北京':{ '海淀':{ '五道口':{ 'soho':{}, '网易':{}, 'google':{} }, '中关村':{ '爱奇艺':{}, '汽车之家':{}, 'youku':{} }, '上地':{ '百度':{} }, }, '昌平':{ '沙河':{ '北航':{} }, '天通苑':{}, '回龙观':{} }, '朝阳':{}, '东城':{} }, '上海':{ '闵行':{ "人民广场":{ '炸鸡店':{} } }, '闸北':{ '火车战':{ '携程':{} } }, '浦东':{} }, '山东':{} } exit_flag = False current_layer = menu layers = [menu] while not exit_flag: for k in current_layer: print(k) choice = input(">>:").strip() if choice == "b": current_layer = layers[-1] #print("change to laster", current_layer) layers.pop() elif choice not in current_layer:continue else: layers.append(current_layer) current_layer = current_layer[choice]

浙公网安备 33010602011771号