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