zoukankan      html  css  js  c++  java
  • 【Python学习之六】高阶函数2(map、reduce、filter、sorted)

    3、filter

      filter()也接收一个函数和一个序列。和map()不同的是,filter()把传入的函数依次作用于每个元素,然后根据返回值是True还是False决定保留还是丢弃该元素。相当于一个过滤器作用。例如,在一个list中,删掉偶数,只保留奇数,可以这么写:

    def is_odd(n):
        return n % 2 == 1
    
    list(filter(is_odd, [1, 2, 4, 5, 6, 9, 10, 15]))
    # 结果: [1, 5, 9, 15]

      这个filter的关键在于实现一个正确的筛选函数。

      练习:回数是指从左向右读和从右向左读都是一样的数,例如12321909。请利用filter()筛选出回数。

     1 #!/usr/bin/env python
     2 # -*- coding: utf-8 -*-
     3 # @Date    : 2018-05-24 12:51:30
     4 # @Author  : Chen Jing (cjvaely@foxmail.com)
     5 # @Link    : https://github.com/Cjvaely
     6 # @Version : $Id$
     7 
     8 # 练习: 回数是指从左向右读和从右向左读都是一样的数,例如12321,909。
     9 # 请利用filter()筛选出回数:
    10 
    11 
    12 def exchange(num):
    13     count = len(str(num)) - 1  # 数字位数3214 -> 4123
    14     sum = 0
    15     m = 0
    16     while num != 0:
    17         sum = sum + (num // (10 ** count)) * 
    18             (10 ** m)  # sum = 3   23  123   4123
    19         num = num % (10 ** count)  # num = 214  14  4
    20         count = count - 1  # 2  1   0
    21         m = m + 1  # 1  2   3
    22     return sum
    23 
    24 
    25 def is_palindrome(n):
    26     count = len(str(n))  # 数字位数
    27     if count == 1:
    28         return True
    29     elif count % 2 == 0:  # 位数为偶数
    30         half1 = n // 10 ** (count // 2)  # 数字前半部分
    31         half2 = n % 10 ** (count // 2)  # 数字后半部分
    32         if half1 == exchange(half2):
    33             return True
    34     else:  # 位数非1 且为奇数
    35         half1 = n // 10 ** ((count + 1) // 2)  # 数字前半部分
    36         half2 = n % 10 ** ((count - 1) // 2)  # 数字后半部分
    37         if half1 == exchange(half2):
    38             return True
    39 
    40 
    41 # 借鉴切片: return str(n) == str(n)[::-1]
    42 # 测试:
    43 output = filter(is_palindrome, range(1, 1000))
    44 print('1~1000:', list(output))
    45 if list(filter(is_palindrome, range(1, 200))) == [1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 22, 33, 44, 55, 66, 77, 88, 99, 101, 111, 121, 131, 141, 151, 161, 171, 181, 191]:
    46     print('测试成功!')
    47 else:
    48     print('测试失败!')
  • 相关阅读:
    iOS之内存管理(ARC)
    分布式锁1 Java常用技术方案
    谈谈如何使用Netty开发实现高性能的RPC服务器
    前后端分离开发模式下后端质量的保证 —— 单元测试
    jquery实现"跳到底部","回到顶部"效果
    html内容超出了div的宽度如何换行让内容自动换行
    采用easyui+ajax+htm+ashx编写 通过用户对应角色 角色对应菜单 控制用户的访问权限
    javascript [] 与 {} 的区别
    图说设计模式
    T4教程1 T4模版引擎之基础入门
  • 原文地址:https://www.cnblogs.com/cjvae/p/9318741.html
Copyright © 2011-2022 走看看