这个排序代码是如何工作的?我无法理解迭代器返回的值是如何用于对列表进行排序的?
mylist=["zero","two","one"]
list1=[3,1,2]
it = iter(list1)
sorted(mylist, key=lambda x: next(it))
输出:
['two', 'one', 'zero']
答案 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"
,2
为1 < 2 < 3
。自["two", "one", "zero"]
起,结果为{{1}}。