【问题标题】:oneliner using reduce in python在python中使用reduce的oneliner
【发布时间】:2020-09-23 09:15:42
【问题描述】:

我正在尝试将我的 Python 技能(初学者)提升到一个新的水平。 我正在尝试自学 functools.reduce() 函数

所以我每次都遇到同样的错误; 如果有人能向我解释我的代码有什么问题,我将不胜感激

我正在尝试构建一个简单的函数来接收一个数字并返回数字的总和

import functools
def sum_using_reduce(number):
    return str(number)[0] + str(number)[1]
number = 104
print(functools.reduce(sum_using_reduce, number))

【问题讨论】:

  • reduce() 需要一个可迭代的 (list, str, ...) 作为第二个参数,但 number 是一个 int(不可迭代)
  • 我收到此错误:TypeError: sum_using_reduce() 采用 1 个位置参数,但给出了 2 个
  • 同时尝试使用 number = '104'
  • docs.python.org/fr/3/library/functools.html#functools.reduce 似乎函数必须需要两个参数。也许试试def sum_using_reduce(a,b): return int(a)+int(b)

标签: python-3.x reduce one-liner


【解决方案1】:

试试这个:

number = 104
functools.reduce(lambda x, y: x+y, [int(i) for i in str(number)])

输出:5

用你的例子:

import functools


def sum_using_reduce(x, y) -> int:
    return x + y


print(functools.reduce(sum_using_reduce, [int(i) for i in str(105)]))

输出:6

另一种方法:

import functools


def sum_using_reduce(number: int) -> int:
    return functools.reduce(lambda x, y: x+y, [int(i) for i in str(number)])


print(sum_using_reduce(124))

输出:7

【讨论】:

  • 非常感谢!我以为我可以在不使用 Lambda func 且不更改函数参数的情况下解决它。这意味着,func 将只接受一个数字,同时只使用一行,并且没有 lambda。但我想这是最简单优雅的方式。谢谢
【解决方案2】:

在您的sum_using_reduce 函数中,您尝试对两个字符串求和,这将简单地执行连接。此外,您提供了一个整数作为 reduce 函数的第二个参数,其中 reduce 函数需要提供一个可迭代对象。

以下是解决这两个要求的解决方案:

from functools import reduce
number=104
print(reduce(lambda x,y:x+y,map(int,str(number))))

map(int,str(number)) 将数字转换为字符串 (104->"104"),然后将字符串中的每个字符转换为整数,返回一个可迭代的映射对象 ("104"->[1,0,4] )。

lambda x,y:x+y 是一个函数,它接受两个整数并将它们相加。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-02-27
    • 2015-03-25
    • 2013-05-27
    • 1970-01-01
    • 2014-11-26
    • 2020-02-16
    • 2018-03-24
    • 2022-01-08
    相关资源
    最近更新 更多