|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 Stubborn 于 2018-12-3 00:52 编辑
视频BIF介绍:过滤器filter
- '''
- 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))
- ---------------------
- 原文:https://blog.csdn.net/weixin_42233629/article/details/82222970
复制代码
filte(函数(第一个参数:function)或者None,第二个参数:可迭代的对象(iterable)),如果第一个参数是函数,则把可迭代的每一个对象作为函数的参数计算,把返回Ture的计算结果筛选出来,并成一个列表。若果第一个参数是None,则把第二个参数里面的Ture值筛选出来,并成一个列表。
map(映射):
- '''
- map(fun, iterable)接收的是一个可迭代对象iterable,把可迭代对象中的元素作为fun的参数,有几个元素就返回几个。
- map里面的lambda每个元素都要设置返回值
- '''
- # 1 列表name中的每个元素增加‘abc’后缀,用映射的方法
- name = ['oldboy', 'alex', 'wusir']
- name1 = map(lambda x: x + 'abc', name)
- print(list(name1))
- # 2 返回一个列表,每个元素是l中的字典的值加‘abc’后缀
- l=[{'name':'alex'},{'name':'y'}]
- l1 = map(lambda x: x + 'abc', [i['name'] for i in l])
- print(list(l1))
- # 3 得到一个列表,由每只股票的总价格组成
- 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 = map(lambda x: x[0] * x[1], [(e['shares'], e['price']) for e in portfolio])
- # 第二种方法
- def fun(dic):
- return dic['shares'] * dic['price']
- l1 = map(fun, portfolio)
- print(list(l1))
- # 4 得到一个价格大于100由元祖组成的列表,如果小于100,就为None
- li9 = map(lambda x: x if x['price'] > 100 else None, portfolio)
- li2 = list(li9
- ---------------------
- 原文:https://blog.csdn.net/weixin_42233629/article/details/82222569
- 版权声明:本文为博主原创文章,转载请附上博文链接!
复制代码
0. 请使用lambda表达式将下边函数转变为匿名函数?
- def fun_A(x, y=3):
- return x * y
复制代码
答案:
01. 请将下边的匿名函数转变为普通的屌丝函数?
- lambda x : x if x % 2 else None
复制代码
答案:- def is_odd(x):
- if x % 2:
- return x
- else:
- return None
复制代码
03:- list(filter(lambda x :x%3==0,range(1,100)))
复制代码
04:- [ i for i in range(1, 100) if not(i%3)]
复制代码
05:- >>> list(zip([1, 3, 5, 7, 9], [2, 4, 6, 8, 10]))
- [(1, 2), (3, 4), (5, 6), (7, 8), (9, 10)]
复制代码
06:- def make_repeat(n):
- return lambda s : s * n
- double = make_repeat(2)
- print(double(8))
- print(double('FishC'))
复制代码
答案:16
FishCFishC |
-
|