Python 这个排序代码是如何工作的?
这个排序代码是如何工作的?我无法理解迭代器返回的值是如何用于对列表进行排序的Python 这个排序代码是如何工作的?,python,Python,这个排序代码是如何工作的?我无法理解迭代器返回的值是如何用于对列表进行排序的 mylist=["zero","two","one"] list1=[3,1,2] it = iter(list1) sorted(mylist, key=lambda x: next(it)) 输出: ['two', 'one', 'zero'] 它的工作原理是这样的,key=lambda x:next(It)部分说明:为3分配一个顺序值,然后将1然后2分配给mylist中的每个元素。所以2首先出现,然后1然后0
mylist=["zero","two","one"]
list1=[3,1,2]
it = iter(list1)
sorted(mylist, key=lambda x: next(it))
输出:
['two', 'one', 'zero']
它的工作原理是这样的,
key=lambda x:next(It)
部分说明:为3
分配一个顺序值,然后将1
然后2
分配给mylist
中的每个元素。所以2
首先出现,然后1
然后0
:
["zero", "two", "one"] # original list
[ 3, 1, 2 ] # assign this order to each element
现在,排序之后:
[ 1, 2, 3 ] # sorted keys
["two", "one", "zero"] # and there you go!
next(it)
每次调用iterable时都返回它的下一项:
>>> list1=[3,1,2]
>>> it = iter(list1)
>>> print next(it)
3
>>> print next(it)
1
>>> print next(it)
2
键
是对每个列表元素调用的函数,用于进行比较
sorted()
因此,对于“零”
,它是3
,“两个”
-1
,“一个”
-2
。由于1<2<3
,结果是[“二”、“一”、“零”]
Lopez我不知道可以使用key以这种方式将顺序值分配给序列元素。有关于这方面的文档吗?人们可能会得出这样的结论:它依赖于一个实现细节,mylist
中的元素从头到尾都被分配了键…?@abckeys=
可以是您想要的任何内容,它将原始列表中的当前元素作为参数(在本例中被忽略)然后返回一个order值,该值将用于比较,以确定如何对list@ThijsvanDien是的,因为在本例中,原始列表和带排序条件的迭代器同时被遍历。@abc关于文档,这里是相关的。请注意,“key指定一个参数的函数,用于从每个列表元素中提取比较键:key=str.lower。默认值为None(直接比较元素)。”
对。但是排序的方式是使用key函数的返回值,在这种情况下分配一个顺序是非常有趣的。有关于这方面的文档吗?@abc好吧,有一个很好的教程。不是答案,但我更直观的等价物是[x[1]对于排序中的x(zip(list1,mylist))]
。。。或者[mylist[i-1]用于列表1中的i]