鱼C论坛

 找回密码
 立即注册
查看: 1293|回复: 0

[技术交流] 第021讲:函数:lambda表达式

[复制链接]
发表于 2018-12-3 00:22:05 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 Stubborn 于 2018-12-3 00:52 编辑

视频BIF介绍:过滤器filter
  1. '''
  2. filter(func, iterable) filter接收的是可迭代对象中的每个元素作为func的参数,返回的是bool值,函数中设置的是判断条件
  3. 返回的是在bool值为索引为True的元素
  4. '''


  5. shares={
  6.     'IBM':36.6,
  7.     'Lenovo':23.2,
  8.     'oldboy':21.2,
  9.     'ocean':10.2,
  10.     }

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

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

  18. # 2.用lambda的方法

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

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

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

  25. portfolio = [
  26.   {'name': 'IBM', 'shares': 100, 'price': 91.1},
  27.     {'name': 'AAPL', 'shares': 50, 'price': 543.22},
  28.     {'name': 'FB', 'shares': 200, 'price': 21.09},
  29.     {'name': 'HPQ', 'shares': 35, 'price': 31.75},
  30.     {'name': 'YHOO', 'shares': 45, 'price': 16.35},
  31. {'name': 'ACME', 'shares': 75, 'price': 115.65}]

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

  35. # 第二种方法:
  36. li9 = map(lambda x: x if x['price'] > 100 else None, portfolio)
  37. a = list(li9)
  38. def fun(l):
  39.     l1 = []
  40.     for i in l:
  41.         if i != None:
  42.             l1.append(i)
  43.     return l1
  44. print(fun(a))

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

  51. ---------------------
  52. 原文:https://blog.csdn.net/weixin_42233629/article/details/82222970
复制代码

filte(函数(第一个参数:function)或者None,第二个参数:可迭代的对象(iterable)),如果第一个参数是函数,则把可迭代的每一个对象作为函数的参数计算,把返回Ture的计算结果筛选出来,并成一个列表。若果第一个参数是None,则把第二个参数里面的Ture值筛选出来,并成一个列表。
map(映射):
  1. '''
  2. map(fun, iterable)接收的是一个可迭代对象iterable,把可迭代对象中的元素作为fun的参数,有几个元素就返回几个。
  3. map里面的lambda每个元素都要设置返回值
  4. '''

  5. # 1 列表name中的每个元素增加‘abc’后缀,用映射的方法
  6. name = ['oldboy', 'alex', 'wusir']

  7. name1 = map(lambda x: x + 'abc', name)  

  8. print(list(name1))

  9. # 2 返回一个列表,每个元素是l中的字典的值加‘abc’后缀

  10. l=[{'name':'alex'},{'name':'y'}]

  11. l1 = map(lambda x: x + 'abc', [i['name'] for i in l])

  12. print(list(l1))


  13. # 3 得到一个列表,由每只股票的总价格组成

  14. portfolio = [
  15.   {'name': 'IBM', 'shares': 100, 'price': 91.1},
  16.     {'name': 'AAPL', 'shares': 50, 'price': 543.22},
  17.     {'name': 'FB', 'shares': 200, 'price': 21.09},
  18.     {'name': 'HPQ', 'shares': 35, 'price': 31.75},
  19.     {'name': 'YHOO', 'shares': 45, 'price': 16.35},
  20. {'name': 'ACME', 'shares': 75, 'price': 115.65}]

  21. #第一种方法

  22. li = map(lambda x: x[0] * x[1], [(e['shares'], e['price']) for e in portfolio])

  23. # 第二种方法

  24. def fun(dic):
  25.     return dic['shares'] * dic['price']
  26. l1 = map(fun, portfolio)
  27. print(list(l1))

  28. # 4 得到一个价格大于100由元祖组成的列表,如果小于100,就为None

  29. li9 = map(lambda x: x if x['price'] > 100 else None, portfolio)

  30. li2 = list(li9
  31. ---------------------
  32. 原文:https://blog.csdn.net/weixin_42233629/article/details/82222569
  33. 版权声明:本文为博主原创文章,转载请附上博文链接!
复制代码


0. 请使用lambda表达式将下边函数转变为匿名函数?
  1. def fun_A(x, y=3):
  2.         return x * y
复制代码

答案:
  1. lambda x,y=2 : x*y
复制代码

01. 请将下边的匿名函数转变为普通的屌丝函数?
  1. lambda x : x if x % 2 else None
复制代码

答案:
  1. def is_odd(x):
  2.         if x % 2:
  3.                 return x
  4.         else:
  5.                 return None
复制代码

03:
  1. list(filter(lambda x :x%3==0,range(1,100)))
复制代码

04:
  1. [ i for i in range(1, 100) if not(i%3)]
复制代码

05:
  1. >>> list(zip([1, 3, 5, 7, 9], [2, 4, 6, 8, 10]))
  2. [(1, 2), (3, 4), (5, 6), (7, 8), (9, 10)]
复制代码

06:
  1. def make_repeat(n):
  2.         return lambda s : s * n

  3. double = make_repeat(2)
  4. print(double(8))
  5. print(double('FishC'))
复制代码

答案:16
FishCFishC
1543767514(1).jpg
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-10-15 03:33

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表