[英]python helper functions and return statements
下面的函数(sort_priority_0)对数字列表进行排序,但将一组数字优先排序。 return语句中元组的目的是什么?
numbers = [8, 3, 1, 2, 5, 4, 7, 6]
group = {2, 3, 5, 7}
def sort_priority_0(values, group):
def helper(x):
if x in group:
return 0, x
return 1, x
values.sort(key=helper)
python sort_priority_0.py
[2, 3, 5, 7, 1, 4, 6, 8]
如果我修改函数并删除元组,则排序按升序进行。 请解释为什么在return语句中有和没有元组的情况下,行为都有如此大的不同?
def sort_priority_1(values, group):
def helper(x):
if x in group:
return x
return x
values.sort(key=helper)
python sort_priority.py
[1, 2, 3, 4, 5, 6, 7, 8]
sort
的key
参数具有功能。 您可以这样想:如果提供了key
,则可迭代的输入将被排序,就像将key
应用于每个元素一样 。
tuples
按第一个元素排序,然后按第二个元素排序,依此类推。 在这种情况下,key函数将iterable中的所有元素都转换为要排序的tuples
,如果数字在优先级组中,则第一个元素为0,否则为1。
这意味着,由于默认情况下sort
是升序的,因此所有优先级数字都将排在最前面,并且它们将在内部按升序排序。
为了说明这一点,您可以认为该过程具有以下步骤:
[8, 3, 1, 2, 5, 4, 7, 6]
开头 key
获得: [(1, 8), (0, 3), (1, 1), (0, 2), (0, 5), (1, 4), (0, 7), (1, 6)]
[(0, 2), (0, 3), (0, 5), (0, 7), (1, 1), (1, 4), (1, 6), (1, 8)]
tuple
的第二个元素,尽管由于这是基于索引的,所以不必从键函数的输出中恢复原始元素): [2, 3, 5, 7, 1, 4, 6, 8]
sort_priority_0
可以在sort_priority_0
使用helper
函数,确保首先将组中的元素按升序排序,然后将其余元素按升序排序。
print(sort_priority_0(numbers,{2, 3, 5, 7}))
#[2, 3, 5, 7, 1, 4, 6, 8]
print(sort_priority_0(numbers,{4, 2, 5, 8}))
#[2, 4, 5, 8, 1, 3, 6, 7]
print(sort_priority_0(numbers,{6, 4, 5, 1}))
#[1, 4, 5, 6, 2, 3, 7, 8]
为组中的元素返回0,x
可以确保在排序时将这些元素推到列表的前面,并通过1,x
将其余的元素推到列表的后半部分,然后按升序排序,因为排序发生在0
和1
,然后在数字之内
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.