zoukankan      html  css  js  c++  java
  • Python map filter reduce enumerate zip 的用法

    map

    map(func, list)list中的数字,一个一个运用到func中,常和lambda一起用。

    nums = [1, 2, 3, 4, 5]
    [*map(lambda x: x**2, nums)]
    

    输出:

    [1, 4, 9, 16, 25]

    这里有个比较骚的用法

    func_list = [ func1, func2, func3, func4] #func1...是事先定义好的函数
    for i in range(1,10):
        v=map(lambda x: x(i), func_list)
       print(v)
    

    v输出是有4个值的列表,每个值都是把当前 i 运用到func_list的结果。

    filter

    filter(func, list)和map有点像,只不过func的输出结果是布尔类型,并且把是True的筛选出来。下面代码是筛选出1-14之间的偶数:

    nums = range(1,15)
    list(filter(lambda x: x%2==0, nums))
    

    输出是:

    [2, 4, 6, 8, 10, 12, 14]

    reduce

    reduce(func, list) 参数和签名的map, filter类似,但是是不同的有以下三点:

    • 取数方法,func接收2个参数。map, filterfunc都需要1个参数。
    • reduce第一次是取2个参数。map, filter都是从list中一次取一个
    • reduce需要从functools导入

    reduce的运行方式是这样:

    • 第一次:取list中的前两个数字,输入到func中,结果保存
    • 第二次:把保存的结果、第三个数,输入到func中,结果保存
    • 第三次:保存的结果、第四个数输入到func中。直到没有可以取的数字。

    示例

    比如求,2,3,4,5连乘的结果,如果用for:

    nums = [2, 3, 4, 5]
    pro = 1
    for i in nums:
        pro = pro * i
    print(pro)
    

    用reduce则:

    from functools import reduce
    nums = [2, 3, 4, 5]
    reduce(lambda x,y:x*y, nums)
    

    两个的结果都是:120

    enumerate

    enumerate(iter, start=0) 中的iter是可迭代的序列,比如list, tuple,str等。生成的是惰性对象。可用于迭代和格式化输出。

    seasons=['春天','夏天','秋天','冬天']
    [*enumerate(seasons)]
    

    输出:

    [(0, '春天'), (1, '夏天'), (2, '秋天'), (3, '冬天')]

    zip

    zip()的参数是可迭代的对象,比如list, str等等。输出的结果是zip对象,可以用{*zip_obj}来解。作用是**把参数中的元素,一一对应成tuple。

    names = ['小明', '小红', '小强', '小李']
    stu_num = [1,2,3,4]
    score =[96,90,60, 82]
    z1=zip(names, stu_num, score)
    print({*z1})
    

    输出是:

    {('小明', 1, 96), ('小红', 2, 90), ('小强', 3, 60), ('小李', 4, 82)}

  • 相关阅读:
    POJ 2778 DNA Sequence(AC自动机+矩阵)
    Challenge & Growth —— 从这里开始
    京东云
    [Done] Codeforces Round #562 (Div. 2) 题解
    HDU 3486 Interviewe
    Codeforces Round #529 (Div. 3) 题解
    Wannafly 挑战赛 19 参考题解
    第十六届上海大学程序设计联赛春季赛暨上海高校金马五校赛 题解
    2018年长沙理工大学第十三届程序设计竞赛 题解
    POJ 3017 Cut the Sequence
  • 原文地址:https://www.cnblogs.com/heenhui2016/p/10986846.html
Copyright © 2011-2022 走看看