python: Can't make list.sort to work
1 2 3 4 5 6 7 8 9 | def sort_line(line1,line2): for x1,y1,x2,y2 in line1: mn1 = min(x1,x2) for x1,y1,x2,y2 in line2: mn2 = min(x1,x2) return mn1 < mn2 lines.sort(sort_line) |
这里每行有4个int。根据我在python wiki中的理解,我需要在sort()函数中传递一个比较函数作为参数。但我得到以下错误,
1 2 3 4 5 6 7 8 | <ipython-input-107-b0e2f3c756cf> in draw_lines(img, lines, color, thickness) 69 """ 70 ---> 71 lines.sort(sort_line) 72 73 for line in lines: TypeError: an integer is required (got type function) |
号
我尝试使用sorted(),但也无法使其工作。
Python和Python版本
Python 3.5.2 |Anaconda 4.2.0 (64-bit)| (default, Jul 5 2016,
11:41:13) [MSC v.1900 64 bit (AMD64)] on win32
号
我正在运行Jupyter笔记本中的代码。
我认为我的实现与下面的问题相同,但我的不起作用。
自定义python列表排序
在遵循Martijn的答案之后,我修改了我的代码
1 2 3 4 | lineList = lines.tolist() //lines is a numpy array so I converted it to list print ('lineList: ',lineList) lineList.sort(key=lambda l: min(l[0], l[2])) lines = np.array(lineList) |
给我以下错误
1 2 3 4 5 6 7 8 | <ipython-input-115-06412e8f5aba> in <lambda>(l) 72 lineList = lines.tolist() 73 print ('lineList: ',lineList) ---> 74 lineList.sort(key=lambda l: min(l[0], l[1])) 75 lines = np.array(lineList) 76 IndexError: list index out of range |
。
你犯了几个错误。您没有足够近地阅读文档;Python3中没有
您需要密切注意您似乎正在阅读的部分,使用cmp参数的旧方法:
In Py3.0, the
cmp parameter was removed entirely (as part of a larger effort to simplify and unify the language, eliminating the conflict between rich comparisons and the__cmp__ methods).
号
这里的错误消息有点混乱,但是
sort(*, key=None, reverse=None)
号
返回排序方式:
When porting code from Python 2.x to 3.x, the situation can arise when you have the user supplying a comparison function and you need to convert that to a key function. The following wrapper makes that easy to do:
1 def cmp_to_key(mycmp):[...]
In Python 2.7, the
cmp_to_key() tool was added to thefunctools module.
号
同样,从
The
functools.cmp_to_key() utility is available to convert a 2.x stylecmp function to a key function.
号
您还错误地实现了您的
但是,您可以不使用(慢速)
1 | lines.sort(key=lambda l: min(l[0], l[2])) |
根据文件:
sort() accepts two arguments that can only be passed by keyword (keyword-only arguments): key and reverse.
号
cmp参数只存在于python 2中,通常被认为是不推荐使用的用法。