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

列表

list = [2,2,-3,-5,9,6,7,5,8,7]
# 选出>0的项
# 1.
filter(lambda x: x>0,data)
[2,2,9,6,7,5,8,7]
# 2.列表解析
[x for x in data if x>0]
[2,2,9,6,7,5,8,7]
# 测试性能
timeit filter(lambda x: x>0,data) # 909ns
timeit [x for x in data if x>0] # 455ns
# 都远快于迭代

字典

d = {x:randint(60,100) for x in xrange(1,21)}
print(d)
# 选出分数高于90的同学
print({k:v for k,v in d.items() if v> 90})
# {1: 80, 2: 70, 3: 77, 4: 76, 5: 82, 6: 70, 7: 85, 8: 87, 9: 70, 10: 74, 11: 80, 12: 91, 13: 77, 14: 85, 15: 80, 16: 71, 17: 82, 18: 72, 19: 96, 20: 100}
# {12: 91, 19: 96, 20: 100}

集合

s = set(list)
print(s,{x for x in s if x%3 == 0}
# {2, 5, 6, 7, 8, 9, -5, -3} {9, -3, 6}

如何为元组的每个成员命名,提高程序的可读性

使用元组时会有很多的[0],[1]…索引,并不能直接看出来代表的字段含义,解决方案如下:

定义类似于其他语言的枚举类型,也就是定义一系列的数值常量

student = ('Jim',16,'male','abc@qq.com')
# 定义常量0,1,2,3
NAME,AGE,SEX,EMAIL = xrange(4)
student[NAME] = 'Jim'
student[AGE] = 16
# ...以此类推

使用标准库中的collections.namedtuple代替内置tuple

from collections import namedtuple