这是 Bratt Slatkin 书中的例子
def sort_priority(values, group):
def helper(x):
if x in group:
return (0, x)
return (1, x)
values.sort(key=helper)
此外,他们还给出了这些值
numbers = [8, 3, 1, 2, 5, 4, 7, 6]
group = {2, 3, 5, 7}
sort_priority(numbers, group)
print(numbers)
我们有
[2, 3, 5, 7, 1, 4, 6, 8]
我不明白这个例子。为什么我们要返回两次,辅助函数实际上做了什么?
最佳答案
您将函数读作:
def helper(x):
if x in group:
return (0, x)
else:
return (1, x)
或者,更简洁地说,
def helper(x):
return (x not in group, x)
这背后的直觉是sort
接受 key
在每个元素上调用的回调。对于每个元素,helper
被调用返回一个元组(可以是 (0, x)
或 (1, x)
取决于 x
是否存在于 VIP 列表中)。
您应该明白,元组是根据多个谓词进行排序的,这意味着在决定元素的顺序时会考虑元组中的两个项目。这意味着 group 返回的元素 (0, x)
与返回的人相比,将首先订购 (1, x)
因为0 < 1
.
在此之后,我们有两组,第一个元素为 0
的组和那些第一个元素1
.全部0
组元素将排在第一位,但这些元素的顺序取决于元组中的第二项 - x
.与 1
类似组元素。
供您输入:
Group0: [2, 3, 5, 7]
Group1: [8, 1, 4, 6]
Ordering within Group0: [2, 3, 5, 7]
Ordering within Group1: [1, 4, 6, 8]
Overall ordering: [Group0, Group1]
Result: [2, 3, 5, 7, 1, 4, 6, 8]
关于python - 了解 Python 中的闭包作用域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45902677/