首页 > 解决方案 > 在 Python 中过滤掉奇数并将它们平方成一个元组

问题描述

这是一个学校作业的问题,感谢您指出我的错误的任何帮助。

首先,关于map()Python 中的函数,我的任务是(不可选择)重新定义它以使其特定于一个元组:

def map(fn, seq):
    if seq == ():
        return ()
    else:
        return (fn(seq[0]),) + map(fn, seq[1:])

使用它,我应该定义另一个函数square_odd(tuple),该函数接受一个包含整数的元组作为参数,并且仅在它们是奇数时才对它们进行平方。本质上,对于 (5,6,7,8,9) 的元组输入,应该返回 (25, 6, 49, 8, 81)。

我的想法是简单地利用lambda编写一个函数,搭配一个if过滤掉奇数。这是我所拥有的:

def square_odd(tpl):
    return map(lambda x: x*x if x%2 == 0, tpl)

PythonSyntaxError之前以逗号返回给我 a tpl。谁能指出这可能是什么问题?我也必须写一个else条件吗?我尝试添加else x,但只返回第一个值的整数值。

标签: pythontuples

解决方案


def map(fn, seq):
    if seq == ():
        return ()
    else:
        return (fn(seq[0]),) + map(fn, seq[1:])

def square_odd(tpl):
    return map(lambda x: x**2 if x%2 else x, tpl)

t = (1,2,3,4,5)
print(square_odd(t))


我已经这样做了,输出是(1, 2, 9, 4, 25).

PS 语法错误引发,因为三元运算符A if condition else B不能用作A if condition


推荐阅读