Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Syntax Python-第二个元素取元组最小值的语法错误_Syntax_Python 2.7_Tuples_Minimum - Fatal编程技术网

Syntax Python-第二个元素取元组最小值的语法错误

Syntax Python-第二个元素取元组最小值的语法错误,syntax,python-2.7,tuples,minimum,Syntax,Python 2.7,Tuples,Minimum,我想创建一个元组列表,第一个元素来自列表,第二个元素来自list元素的函数,然后从函数的输出中找到最小值。 下面的代码最好地解释了我想要什么: x,y = min((x,f(x) for x in array), key = lambda(k, v): v[1]) 运行脚本后,我得到: SyntaxError: invalid syntax 注意:f(x)返回int/float 更新:我根据另一个堆栈溢出问题编写了代码,所以我不知道自己到底在做什么。有人能解释一下钥匙是如何工作的吗? 谢谢

我想创建一个元组列表,第一个元素来自列表,第二个元素来自list元素的函数,然后从函数的输出中找到最小值。 下面的代码最好地解释了我想要什么:

x,y = min((x,f(x) for x in array), key = lambda(k, v): v[1])
运行脚本后,我得到:

SyntaxError: invalid syntax
注意:f(x)返回int/float

更新:我根据另一个堆栈溢出问题编写了代码,所以我不知道自己到底在做什么。有人能解释一下钥匙是如何工作的吗?

谢谢您的回答:)

您需要添加一些括号:

x, y = min(((x,f(x)) for x in array), key = lambda t: t[1][1])
我调整了lambda表达式,使其在Python 2和Python 3中都能工作(在参数列表中不能使用元组解包)


记住,键只是一个函数,它应该返回我们想要知道的最小值。它是为输入序列中的每个元素调用的。在本例中,这是一个
(x,f(x))
元组,您希望通过
f(x)
返回值的第二个元素找到最小值。

在您的列表理解中,
不被解析为元组表达式。您需要用
()
来包装它,以使解析器知道

x,y = min(( (x,f(x)) for x in array), key = lambda(k, v): v[1])
我猜你想要这个:

x,y = min(((x,f(x)) for x in array), key = lambda(k, v): v)

请添加缺少的括号,或按如下方式重写代码:

y, x = min(zip(map(f, array), array))
我已经交换了元组元素的顺序,不必为
min()
提供键函数

以下是另一个版本:

x = min(array, key=f)
y = f(x)

它简短明了,但对
f()

Python 2或3进行了额外调用?在python 3中,不能在lambda表达式中使用括号。@MartijnPieters抱歉,python 2!既然有人否决了我的问题,我就不能再否决我的答案了,哈哈——如果我尝试一下:x,y=min(数组,key=f),f(x)被接受以理解意图!谢谢