数据结构

如何在列表,字典,集合中根据条件筛选数据

方式一: 通过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))

 

 

posted @ 2022-07-06 21:49  huxl1  阅读(28)  评论(0编辑  收藏  举报