这个排序代码是如何工作的?

时间:2013-09-08 22:33:10

标签: python

这个排序代码是如何工作的?我无法理解迭代器返回的值是如何用于对列表进行排序的?

mylist=["zero","two","one"]
list1=[3,1,2]
it = iter(list1)
sorted(mylist, key=lambda x: next(it))

输出:

['two', 'one', 'zero']

2 个答案:

答案 0 :(得分:7)

它的工作方式如下 - key=lambda x: next(it)部分说明:将订单值3,然后1然后2分配给{{1}中的每个元素}}。首先是mylist,然后是two,然后是one

zero

现在,排序后:

["zero", "two", "one"] # original list
[  3,      1,     2  ] # assign this order to each element

答案 1 :(得分:1)

每次调用时,

next(it)都会返回迭代的下一项:

>>> list1=[3,1,2]
>>> it = iter(list1)
>>> print next(it)
3
>>> print next(it)
1
>>> print next(it)
2

key是在每个列表元素上调用的函数,用于进行比较。

sorted():如果您未指定key参数,则会比较项目值,如果您提供key - 它会使用key函数调用的结果进行制作列表项目之间的比较。

因此,"zero"对于3 - "two",对于1 - "one"21 < 2 < 3。自["two", "one", "zero"]起,结果为{{1}}。