列表、字典、集合中筛选数据

列表中筛选数据

# for 循环选取数据
data = [1,5,-3,-2,6,0,9]
res = []
for x in data:
    if x >= 0:
        res.append(x)
print res

# filter 函数选取指定数据
# 运行环境为 ipython 2.7 操作系统ubuntu
from random import randint
data = [randint(-10,10) for _ in xrange(10)]
data
[2, -3, -2, 4, 4, -8, 0, 4, -9, 9]
filter(lambda x: x >=0 ,data)
[2, 4, 4, 0, 4, 9]

# 列表解析选取指定数据
[x for x in data if x >= 0]
[2, 4, 4, 0, 4, 9]

# 运行时间对比
In [9]: timeit filter(lambda x: x >=0 ,data)
1000000 loops, best of 3: 968 ns per loop

In [10]: timeit  [x for x in data if x >= 0]
1000000 loops, best of 3: 518 ns per loop
结论:在列表中获取指定数据时,列表解析快

 字典中筛选数据

# 首先生成一个字典
d = {x: randint(60,100) for x in xrange(1,21)}
d
{1: 66,
 2: 85,
 3: 76,
 4: 67,
 5: 94,
 6: 69,
 7: 99,
 8: 78,
 9: 70,
 10: 79,
 11: 67,
 12: 92,
 13: 80,
 14: 62,
 15: 90,
 16: 64,
 17: 74,
 18: 71,
 19: 69,
 20: 77}
# 筛选出高于90的项,使用字典解析(类似于列表解析)
{k:v for k,v in d.iteritems() if v > 90}
{5: 94, 7: 99, 12: 92}

集合中筛选数据

# 使用集合解析
# 首先将列表转换成集合
data
[2, -3, -2, 4, 4, -8, 0, 4, -9, 9]
s = set(data)
s
{-9, -8, -3, -2, 0, 2, 4, 9}
# 接下来使用集合解析得出要的数
{x for x in s if x % 3 ==0}
{-9, -3, 0, 9}

 

posted @ 2018-11-28 11:08  Star-Hitian  阅读(208)  评论(0)    收藏  举报