这个排序代码是如何工作的?我无法理解迭代器返回的值如何用于对列表进行排序?
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"]。