Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/301.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.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
python排序错误:TypeError:';列表';对象不可调用_Python_List_Python 2.7_Sorting - Fatal编程技术网

python排序错误:TypeError:';列表';对象不可调用

python排序错误:TypeError:';列表';对象不可调用,python,list,python-2.7,sorting,Python,List,Python 2.7,Sorting,我试图根据每个元素的第一项对列表进行排序: def getKey(item): return item[0] def myFun(x): return sorted(x, key= getKey(x)) my_x = [[1,100], [5,200], [3,30]] myFun(my_x) 我希望根据每个元素的第一项进行排序,即1、5和3。预期结果应该是:[[1100],[3,30],[5200]] 但是,我得到了以下错误: TypeErrorTracebac

我试图根据每个元素的第一项对列表进行排序:

def getKey(item):
    return item[0]    

def myFun(x):
    return sorted(x, key= getKey(x))

my_x = [[1,100], [5,200], [3,30]]

myFun(my_x)
我希望根据每个元素的第一项进行排序,即1、5和3。预期结果应该是:
[[1100],[3,30],[5200]]

但是,我得到了以下错误:

TypeErrorTraceback (most recent call last)
<ipython-input-7-4c88bbc1a944> in <module>()
      3 
      4 my_x = [[1,100], [5,200], [3,30]]
----> 5 myFun(my_x)

<ipython-input-7-4c88bbc1a944> in myFun(x)
      1 def myFun(x):
----> 2     return sorted(x, key= getKey(x))
      3 
      4 my_x = [[1,100], [5,200], [3,30]]
      5 myFun(my_x)

TypeError: 'list' object is not callable
TypeErrorTraceback(最近一次调用上次)
在()
3.
4 my_x=[[1100]、[5200]、[3,30]]
---->5我的乐趣(我的x)
在myFun(x)
1 def myFun(x):
---->2返回排序(x,key=getKey(x))
3.
4 my_x=[[1100]、[5200]、[3,30]]
5我的乐趣(我的x)
TypeError:“列表”对象不可调用

知道我做错了什么吗?谢谢

更新

sorted
key
属性应该是可调用的,因此您需要
key=getKey
而不是分配
key=getKey()

初始答案(如果您想让代码看起来更好,可能会很有用):

没有像
getKey
这样的方法,但是有来自包的方法

给下层选民

说得很清楚

我希望根据每个元素的第一项进行排序

如果您认为只使用
sorted()
对列表进行排序,那么您就错了

>>> my_x = [[1,100], [5,200], [3,30], [1,30]]
>>> myFun(my_x)
[[1, 100], [1, 30], [3, 30], [5, 200]]
>>> sorted(my_x)
[[1, 30], [1, 100], [3, 30], [5, 200]]
因此,
排序
并不像OP所希望的那样,只基于第一个参数

初始答案的更新

另外,当我回答没有
getKey
方法时,您可以查看


因此OP post现在有了
getKey
方法,您可以查看相应的@MosesKoledoye的您不需要调用函数
getKey
。的签名要求您将
参数作为可调用参数传递:

sorted(x, key=getKey)

问题是您正在将
getKey(x)
的结果分配给
key=getKey(x)
。您希望分配函数指针

def getKey(item):
    return item[0]    

def myFun(x):
    return sorted(x, key=getKey)

my_x = [[1,100], [5,200], [3,30]]

myFun(my_x)
话虽如此,如果您只是基于第一个元素进行排序,那么这就是
排序的默认行为


您只需执行排序(x)
getKey
是一个函数(一种“可调用”对象)。另一方面,它的输出,
getKey(x)
,是一个不可调用的
列表
对象。您的错误是,您正在设置
key=getKey(x)
,因此为参数
key
指定了一个
list
对象,而
sorted
希望该名称附带可调用的内容。这就解释了为什么当内部排序代码试图调用您的
键时,它会失败,并出现错误“'list'对象不可调用”。真的,如果你来这里,你应该说
key=getKey

,因为你的错误与问题中提到的完全相同

TypeError:“list”对象不可调用

很可能你只是做了如下事情:

sorted = sorted(someList) 
如果变量名从sorted更改为其他名称,则错误将消失,如

sortedList = sorted(someList)

什么是
getKey
?我想您需要的是
key=operator.itemgetter(0)
@inspectorG4dget,这根本不需要。这是排序后的
的默认行为。对不起,我有getKey,忘了把它放在问题中。请参阅编辑。这修复了OP的代码,但无法帮助他们找出错误所在。另外,这是排序的
的默认行为。您甚至不需要
itemgetter
。最后,OP的代码中显然有一个
getKey
,否则将是另一个错误。对不起,我有getKey,忘了把它放在问题中。请参见编辑。@MorganThrapp我正在注意代码片段。我已经更新了答案。这仍然有一个问题,那就是没有真正显示出他们做错了什么。此外,即使帖子中没有
getKey
的定义,它仍然明显存在,否则OP的问题将是
namererror
。是的,在重复项的情况下,默认排序行为与OP的实现略有不同,但我不太愿意称之为故意的。
sortedList = sorted(someList)