0

我最近拿起了 Python,想知道如何做以下事情。假设我们有一个包含 3 个数字的列表:

x = [1, 2, 3]

然后,我们询问用户如何处理这些数字:

whatdo = raw_input('> ')

例如,用户输入“+2”。现在如何将“+ 2”应用于列表的所有元素?

4

2 回答 2

6
import operator as oper

operations = {
    '+': oper.add,
    '-': oper.sub,
    '*': oper.mul
}

numbers = [1, 2, 3]

op, num1 = raw_input("> ").split()
num1 = int(num1)
op = operations[op]

y = [op(num1, num2) for num2 in numbers]
print y

--output:--
> * 30
[30, 60, 90]
于 2013-06-09T11:33:35.800 回答
2

更通用的可能性是让用户指定一个函数,并使用 Python 的eval语句将字符串转换为实际lambda函数。

numbers = [1, 2, 3]
function = raw_input('> Please specify f(x): ')
f = eval("lambda x: " + function)
print map(f, numbers)

例子:

> Please specify f(x): (x+1)**2
[4, 9, 16]

当然,这允许用户指定各种无效甚至恶意的“功能”,所以要小心处理。

于 2013-06-09T12:21:58.593 回答