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
中的元素从头到尾都被分配了键…?@abc
keys=
可以是您想要的任何内容,它将原始列表中的当前元素作为参数(在本例中被忽略)然后返回一个order值,该值将用于比较,以确定如何对list@ThijsvanDien是的,因为在本例中,原始列表和带排序条件的迭代器同时被遍历。@abc关于文档,这里是相关的。请注意,
“key指定一个参数的函数,用于从每个列表元素中提取比较键:key=str.lower。默认值为None(直接比较元素)。”
对。但是排序的方式是使用key函数的返回值,在这种情况下分配一个顺序是非常有趣的。有关于这方面的文档吗?@abc好吧,有一个很好的教程。不是答案,但我更直观的等价物是
[x[1]对于排序中的x(zip(list1,mylist))]
。。。或者
[mylist[i-1]用于列表1中的i]