通用做法:迭代+判断
data = [1,5,6,-2,-6,0,9]
res=[]
for x in data:
if x >= 0:
res.append(x)
print(res)
高级方式:
列表解析:
随机生成-10到10的十个随机数
注意:python2.x->xrange();python3.x->range()
from random import randint
data = [randint(-10,10) for _ in range(10)]
print(data)
方法一:
filter()把传入的函数依次作用于每个元素,然后根据返回值是True还是False决定保留还是丢弃该元素。
filter(lambda x:x >= 0,data)
报错:
解决:在python3里面,map(),filter的返回值已经不再是list,而是iterators, 所以想要使用,只用将iterator 转换成list 即可, 比如 list(map()) 。
list(filter(lambda x:x >= 0,data))
方法二:
[x for x in data if x >= 0]
可以看出列表解析更快些。不过这两种方式都是远快于迭代的方案的。
筛选字典
字典的格式:{2: 97, 19: 93, 13: 98},k : v.保持形式不变,然后遍历判断
生成:
from random import randint
d = {x: randint(60,100) for x in range(1,21)}
同时迭代字典中的键和值
{k: v for k,v in d.iteritems() if v > 90}
报错:AttributeError: ‘dict’ object has no attribute ‘iteritems’
解决:Python3.5中:iteritems变为items
集合解析:
将列表转换测集合
s = set(data)
print({x for x in s if x % 3 ==0})