【问题标题】:Using lambda with user input list将 lambda 与用户输入列表一起使用
【发布时间】:2016-05-13 10:55:21
【问题描述】:

我正在尝试使用带有用户输入列表的 lambda 函数来乘以所有输入的数字。如果输入 3、4、5,我想要这些数字的乘积。我也尝试过使用 operator.mult,但没有成功。

import operator
import functools

mult_list = list()
mult_list.append(input("Enter numbers seperated by a comma: "))
mult = functools.reduce(lambda x, y: x*y, [mult_list])
print mult

我通常会得到([无论输入什么数字])作为 lambda 和 operator.mult 的结果。任何帮助将非常感激!

【问题讨论】:

  • input("Enter numbers seperated by a comma: ") 是一个字符串,而不是数字列表。您必须先拆分并映射到数字。
  • 你可以这样做 map(int,"1,2,3".split(",")) 编辑:nvm,输入似乎是一个类型元组

标签: python lambda


【解决方案1】:

您要发送到functools.reduce 的对象是[mult_list],它是一个单例list 包装另一个 单例list,其中包含Python 3 中的字符串或tuple在 Python 2 中。字符串没有每个数字的单独元素,它包含字符串,而不是数字。它在 Python 2 中会更好地工作,因为它会评估来自 inputtuple。但是,reduce 是 Python 2 中的内置函数,不需要导入。

在 Python 2 中:

>>> mult_list = input("Enter numbers seperated by a comma: ")
Enter numbers seperated by a comma: 1, 2, 3
>>> mult = reduce(lambda x, y: x*y, mult_list)
>>> print mult
6

在 Python 3 中:

>>> import functools
>>> mult_list = list(map(int, input("Enter numbers seperated by a comma: ").split(',')))
Enter numbers seperated by a comma: 1, 2, 3
>>> mult = functools.reduce(lambda x, y: x*y, mult_list)
>>> print(mult)
6

但是,你应该放弃reduce,像这样:

>>> mult_list = list(map(int, input("Enter numbers seperated by a comma: ").split(',')))
Enter numbers seperated by a comma: 1, 2, 3
>>> num = 1
>>> for i in mult_list:
...     num *= i
...
>>> print(num)
6

在 Python 2 中,将 input 替换为 raw_input

【讨论】:

  • 非常感谢!我拿出reduce 并做了for循环,效果很好。只是出于好奇,您为什么建议用循环替换reduce
  • @JJ_Marrs - 如相关PEP 中所述,请参阅herehere。简而言之,就是写、读、用都比较复杂,导致bug没有好处。
【解决方案2】:

假设这是Python3,input的结果是一个字符串,所以需要split并转换成int的列表

import functools

inp = input("Enter numbers seperated by a comma: ")
mult_list = [int(x) for x in inp.split(',')]

mult = functools.reduce(lambda x, y: x*y, [mult_list])
print(mult)

由于您使用print 作为语句,很可能您使用的是Python2.x 在这种情况下您需要使用raw_input

inp = raw_input("Enter numbers seperated by a comma: ")

在 Python2 中使用 input 通常是个坏主意,因为它会评估输入的任何内容(不仅仅是逗号分隔的整数)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-20
    • 2020-06-18
    相关资源
    最近更新 更多