【python高级编程】在列表,字典,集合中根据条件筛选数据

列表筛选

假设我们现在有一个学生成绩信息data列表,现在我们要得到其中的奇数,可以有3种方式。

  • 使用循环迭代
  • 使用filter过滤器
  • 使用列表解析式
from random import randint
from timeit import timeit

data = [randint(-10, 10) for _ in range(10)] 
print("data=", data)

# 使用filter过滤器
print(list(filter(lambda x: x % 2, data)))

# 使用列表解析式
print([x for x in data if x >= 0])


字典筛选

延续上一段代码,假设我们现在有了一个学生成绩字典,需要找出其中成绩大于90的学生键值对,我们仍然可以用上述三种方式来操作。

d = {x: randint(60, 100) for x in range(1, 10)} # 得到分数高于90的人
print("成绩:", d)
# 使用filter过滤器
dict(filter(lambda item: item[1]>=90, d.items()))

# 字典解析式
print({k: v for k, v in d.items() if v > 90})

集合过滤

假设我们现在有一个集合,想获得能被3整除的子集,我们还是能使用上述三种方式。

st = set(data)  #  得到集合中能被3整除的子集

# 使用filter过滤器
print(set(filter(lambda x: x % 3 == 0, st)))

# 使用集合解析式
print(set({x for x in st if x % 3 == 0}))

总结

上述使用了filter过滤器,以及列表解析式,使用timeit函数测量发现,使用解析式的速度最快,循环迭代其次,而使用filter过滤器的速度最慢。

你可能感兴趣的:(python高级编程)