filter(function, itetable)

生成一个迭代器从这些可迭代对象元素里面从符合函数的返回值为真。iterable参数可以是一个序列,一个支持可迭代的容器,或者一个迭代器,如果function这个形参没有,那么会删除所有为false的迭代元素。这个函数等价于 (item for item in iterable if function(item)) 这个生成器表达式。或者(item for item in iterable if item)
这里写图片描述

dic = {'k1': 10, 'k2': 100, 'k3': 50, 'k4': 90}
print(list(filter(lambda x: x[1] > 50, dic.items())))  # 把值大于50的由元祖组成的键值对过滤出来。

>

[('k2', 100), ('k4', 90)]

'''
filter(func, iterable) filter接收的是可迭代对象中的每个元素作为func的参数,返回的是bool值,函数中设置的是判断条件
返回的是在bool值为索引为True的元素
'''


shares={
    'IBM':36.6,
    'Lenovo':23.2,
    'oldboy':21.2,
    'ocean':10.2,
    }

# 把shares中的价格大于20的股票过滤出来

# 1.用函数定义的方法:
def func(dict):
    list1 = []
    for i in dict:
        list1.append((dict[i] > 20))
    return list1

# 2.用lambda的方法

 # 第一种方法
l2 = filter(lambda x: True if shares[x] > 20 else False, [i for i in shares])
# 其中x是接收的参数,也就是i,如果为False,filter函数会直接pass。也就是放True的条件上去就行了

# 第二种方法
l1 = filter(lambda x: shares[x] > 20, [i for i in shares])

# 把股票价格大于100的字典过滤出来

portfolio = [
  {'name': 'IBM', 'shares': 100, 'price': 91.1},
    {'name': 'AAPL', 'shares': 50, 'price': 543.22},
    {'name': 'FB', 'shares': 200, 'price': 21.09},
    {'name': 'HPQ', 'shares': 35, 'price': 31.75},
    {'name': 'YHOO', 'shares': 45, 'price': 16.35},
{'name': 'ACME', 'shares': 75, 'price': 115.65}]

# 第一种方法:
li = filter(lambda x: x['price'] > 100, portfolio)
# x为portfolio中的每一个元素,如果x['price'] > 100为True则返回给li这个迭代器True对应的元素

# 第二种方法:
li9 = map(lambda x: x if x['price'] > 100 else None, portfolio)
a = list(li9)
def fun(l):
    l1 = []
    for i in l:
        if i != None:
            l1.append(i)
    return l1
print(fun(a))

# 写代码,最终得到的是(每个元祖第一个元素>2,第三个*至少是4个。
l1 = [1,2,3,4,5,6]
l2 = ['oldboy','alex','wusir','太白','日天']
tu = ('**','***','****','*******')
b = filter(lambda x: x[0] > 2 and len(x[2]) > 3, zip(l1, l2, tu))
print(list(b))

这里写图片描述

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐