数据结构
如何在列表,字典,集合中根据条件筛选数据
方式一: 通过for循环迭代每个元素进行筛选
方法二: 通过匿名函数filter方法, 列表解析方式进行迭代
#生成一各随机列表 from random import randint data = [randint(-10,10) for i in range(10)] # 随机列表 print(data) #方式二进行过滤 l = filter(lambda x: x >= 0,data) #方式三使用列表解析 l1 = [x for x in data if x >= 0 ] print(l1)
对字典进行筛选
# 随机生成字典 from random import randint d = {x:randint(60,100) for x in range(20)} #随机字典 print(d) # 字典解析 筛选值大于90 的 d1 = {k:v for k,v in d.items() if v >= 90} print(d1)
对集合进行筛选
# 生成随机集合 from random import randint data = {randint(-10,10) for i in range(10)} s = {x for x in data if x > 0} print(s)
如何找到多个字典中的公共建
#随机生成多个字典 #sample 随机采用, 用法 sample('abcdf',3) 在前边指定的中随机选3个 from random import randint, sample #生成3个随机字典 d1 ={x:randint(1,5) for x in sample("abcfed",randint(3,6))} d2 ={x:randint(1,5) for x in sample("abcfed",randint(3,6))} d3 ={x:randint(1,5) for x in sample("abcfed",randint(3,6))} print(d1,d2,d3) # 筛选公共建 # 方法一 通过for res = [] for x in d1: if x in d2 and x in d3: res.append(x) # 方法二 通过调用viewkeys() 方法得到一key的集合 # l1 = d1.viewkeys() # #通过集合并集计算 l = d1.viewkeys() & d2.viewkeys() & d3.viewkeys() # 方法三用map 函数 reduce函数获取集合 l = reduce(lambda a,b: a & b , (dict.viewkeys(),[d1,d2,d3]))
如何让字典保持有序
实例
collections.ordereddict 代替内置字典实现字典的有序
# 模拟学生答题所用时间 from random import randint from time import time from collections import OrderedDict d = OrderedDict() # 创建一个空字典 start = time() s = ['q','w','e','r','t','y','u'] # 学员 for i in range(7): input("考试输入") #s.pop(randint(0, 7 - i)) 报错pop index out of range异常。 因为列表pop最后一位值是索引-i p = s.pop(randint(0,6 - i)) # 随机一名学员 end = time() print(i + 1,p,end - start) d[p] = (i+1,end - start) # 将学生排名和时间放在字典 for x in d.items(): print(x)
如何添加历史记录功能
实例如: 猜数字游戏, 相关历史记录踩过哪些数据,可以设定历史记录只记录3条
可使用标准库collections.deque ,是一个双端循环队列
程序退出前,可以把pickle 将队列对象存入文件,再次运行程序,将其导入
# 带有历史记录的猜数游戏 from random import randint from collections import deque q = deque([],5) # 历史队列记录5个数 n = randint(1,100) def guest(k): if k == n: print("true") return True elif k < n: print("%s is less number" % k) else: print("%s is greater number" % k) return False while True: g_n = input("you guest number:") if g_n.isdigit(): k = int(g_n) q.append(k) # 将每次输入的数存放在队列 if guest(k): break elif g_n == "p": print(list(q))