这是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]
我不明白这个example.Why,我们有两次返回吗? helper函数到底做了什么?
发布于 2017-08-27 15:41:52
请注意,第一个return
语句位于if
块中。在python中,每当函数遇到return语句时,执行都会返回给调用者。在您的示例中,这两个return只是避免if else语句的一种快捷方式。当组中存在特定值时,返回(0,x)
,如果不满足if
条件,则返回(1,x)
。
发布于 2017-08-27 15:45:02
没有嵌套函数的代码会更容易理解:
def helper(x):
global group
if x in group:
return 0, x
return 1, x
def sort_priority(values):
values.sort(key=helper)
numbers = [8, 3, 1, 2, 5, 4, 7, 6]
group = {2, 3, 5, 7}
sort_priority(numbers)
print(numbers)
现在很容易看出,sort_priority()
只是通过调用helper
函数对值进行排序,该函数通过为每个x
赋值来创建一个顺序。
当使用group
格式的值调用helper
函数时,它会获得“较低”的优先级(0),而如果该值不是group
格式,则会获得更高的优先级(1)。
仔细看看helper
确实会发现:
def helper(x):
global group
if x in group:
return 0, x # <-- we're in the `if` so `x` gets zero
return 1, x # <-- if we got here it means we didn't get into the `if` so `x` gets one
因此,通过在排序中使用helper
作为key
函数,我们将获得并排序列表,该列表首先放置group
中的项,然后才放置不在group
中的项
[2, 3, 5, 7, 1, 4, 6, 8]
^
The first item that is not in group
发布于 2021-01-14 22:37:36
对于我来说,使用sorted(values)
函数而不是values.sort()
函数更明显,否则它会有点模棱两可的“返回什么?”,“实际上是如何使用帮助器的?”
def sort_priority(values, group):
def helper(x):
if x in group:
return (0, x)
return (1, x)
sorted_values = sorted(values, key=helper)
return sorted_values
numbers = [8, 3, 1, 2, 5, 4, 7, 6]
group = {2, 3, 5, 7}
print('Sorted Numbers List: ', sort_priority(numbers, group))
当然,在使用sorted()
之后,排序列表会显式返回它。
https://stackoverflow.com/questions/45902677
复制相似问题