将lambda与用户输入列表一起使用

时间:2016-05-13 02:38:55

标签: python lambda

我正在尝试使用带有用户输入列表的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的结果。任何帮助将非常感激!

2 个答案:

答案 0 :(得分:0)

您要发送到functools.reduce的对象是[mult_list],这是一个单独的list包裹另一个单身list,其中包含一个字符串在Python 3中或在Python 2中的tuple。字符串没有为每个数字分别元素,它包含字符串,而不是数字。它在Python 2中会更好用,因为它会从tuple评估input。但是,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

答案 1 :(得分:0)

假设这是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通常是一个坏主意,因为它将评估所输入的内容(不仅仅是以逗号分隔的整数)