6

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

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

输出:

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

2 回答 2

7

它的工作原理是这样的 -key=lambda x: next(it)部分说明:分配一个顺序值3,然后1分配给 中的2每个元素mylist。所以two先来,one然后zero

["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!
于 2013-09-08T22:37:27.400 回答
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"- 2。既然1 < 2 < 3,结果就是["two", "one", "zero"]

于 2013-09-08T22:40:08.420 回答