为了账号安全,请及时绑定邮箱和手机立即绑定

python 辅助函数和返回语句

python 辅助函数和返回语句

LEATH 2022-01-18 15:38:46
下面的函数 (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]
查看完整描述

2 回答

?
皈依舞

TA贡献1851条经验 获得超3个赞

keyin 参数sort接受一个函数。你可以这样想:如果key提供了,那么输入的可迭代对象将被排序,就好像key应用于每个元素一样。

tuples按第一个元素排序,然后是第二个元素,依此类推。在这种情况下, key 函数将 iterable 中的所有元素转换为tuples,其中如果数字在优先级组中,则第一个元素为 0,否则为 1。

这意味着,由于sort默认升序,所有优先级数字将排在第一位,并且它们将在内部按升序排序。

为了说明,您可以将过程视为具有以下步骤:

  1. 从...开始 [8, 3, 1, 2, 5, 4, 7, 6]

  2. 申请key获得:

[(1, 8), (0, 3), (1, 1), (0, 2), (0, 5), (1, 4), (0, 7), (1, 6)]
  1. 将结果按升序排序得到:

[(0, 2), (0, 3), (0, 5), (0, 7), (1, 1), (1, 4), (1, 6), (1, 8)]
  1. 取原始数据的相应元素(在这种情况下,是 的第二个元素tuple,尽管因为这是基于索引的,所以不需要从键函数的输出中恢复原始元素):

[2, 3, 5, 7, 1, 4, 6, 8]


查看完整回答
反对 回复 2022-01-18
?
人到中年有点甜

TA贡献1895条经验 获得超7个赞

helper函数 insort_priority_0确保首先对组中的元素按升序排序,然后将其余元素按升序排序,如下所示。


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,然后在数字内


查看完整回答
反对 回复 2022-01-18
  • 2 回答
  • 0 关注
  • 138 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信