Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python-如何使用';短路';值(或标志)_Python_Sorting_Customization_Short Circuiting - Fatal编程技术网

Python-如何使用';短路';值(或标志)

Python-如何使用';短路';值(或标志),python,sorting,customization,short-circuiting,Python,Sorting,Customization,Short Circuiting,我有一个自定义排序函数类似于问题。但是,我有一个列表值,如果存在,它必须排序到列表的末尾(最后一个位置)。这是否可以在自定义排序函数中实现 我曾考虑过以下几点: mylist.sort(cust_sort) def cust_sort(item1, item2): if item1.key == critical_value: #If the item1 in question is the "must be last" item, place it last.

我有一个自定义排序函数类似于问题。但是,我有一个列表值,如果存在,它必须排序到列表的末尾(最后一个位置)。这是否可以在自定义排序函数中实现

我曾考虑过以下几点:

mylist.sort(cust_sort)

def cust_sort(item1, item2):
    if item1.key == critical_value:
        #If the item1 in question is the "must be last" item, place it last.
        return -99 
        #There should never be more than 99 items in this list, but
        #   this number could be as large as necessary.
    if item1.key > item2.key:
        return 1
    elif item1.key < item2.key:
        return -1
    if item1.name > item2.name:
        return 0

    return 0
mylist.sort(客户排序)
def客户分类(项目1、项目2):
如果item1.key==临界值:
#如果所讨论的项目1是“必须是最后一个”项目,请将其放在最后。
返回-99
#此列表中的项目不得超过99项,但
#这个数字可以根据需要而定。
如果item1.key>item2.key:
返回1
elif item1.keyitem2.name:
返回0
返回0

注意:我想尽可能地限制我的这个修复程序的实现范围——如果可能的话,只限于这个自定义排序函数。我知道我可以删除这个临界值,执行排序,然后重新添加临界值。然而,这是一段遗留代码,并且已经相当混乱——直接在自定义排序函数中实现修复将操作范围之外的影响降至最低。我更喜欢最大限度地提高可读性和减少干扰。

与其创建比较器函数,不如创建一个键函数:

mylist.sort(key=lambda i: (i.key == CRITICAL_VALUE, i.key, i.name))

这表明(至少对我来说)您首先按
i.key==CRITICAL\u VALUE
排序,然后按
i.key
,最后按
i.name

排序,而不是创建一个比较函数,而是创建一个键函数:

mylist.sort(key=lambda i: (i.key == CRITICAL_VALUE, i.key, i.name))

这清楚地表明(至少对我来说)您首先按
i.key==CRITICAL\u VALUE
排序,然后按
i.key
,最后按
i.name

排序您使用的是哪种对象?如果可以映射到数字,则可以利用
float('inf')
float('-inf')
item.key是int或int-as-string.and。。您使用的是Python 2吗?是的,Python 2.7您使用的是哪种对象?如果可以映射到数字,则可以利用
float('inf')
float('-inf')
item.key是int或int-as-string.and。。你在使用Python 2吗?是的,Python 2.7我还在学习
lambda
函数。这是否将.sort()函数重新定义为三个函数?(第一个排序是i.key等于临界值,第二个排序是i.key上的正则.sort(),第三个排序是i.name?@user3.1415927上的.sort():您可以执行
def func(i):返回(i.key==临界值,i.key,i.name)
mylist.sort(key=func)
如果您更清楚,但是
lambda
实际上除了创建函数之外没有任何意义。
mylist.sort(key=func)
sorts
mylist
但是检查
func(a)
在确定顺序时不是
a
。我仍在学习
lambda
函数。这是否将.sort()函数重新定义为三个函数?(第一个排序是I.key等于CRIT_VAL,第二个排序是I.key上的常规.sort(),第三个排序是I.name上的.sort())@user3.1415927:您可以执行
def func(I):返回(i.key==CRITICAL\u VALUE,i.key,i.name)
mylist.sort(key=func)
如果您更清楚的话,但是
lambda
除了创建一个函数之外实际上没有任何意义。
mylist.sort(key=func)
sorts
mylist.sort(key=func>,但是检查
func(a)
而不是
a
确定订单时。