我正在尝试使用带有用户输入列表的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的结果。任何帮助将非常感激!
答案 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
通常是一个坏主意,因为它将评估所输入的内容(不仅仅是以逗号分隔的整数)