Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.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分支对象?_Python_List_Sorting_Object_Gitpython - Fatal编程技术网

Python:已排序-默认情况下不排序Python分支对象?

Python:已排序-默认情况下不排序Python分支对象?,python,list,sorting,object,gitpython,Python,List,Sorting,Object,Gitpython,我有这个方法: def filter_branches_by_names(self, names, exclude=False): """Filter branches list using names list. Args: names (list): names list to use as filter condition. exclude (bool): If set to False, keep branches

我有这个方法:

def filter_branches_by_names(self, names, exclude=False):
    """Filter branches list using names list.

    Args:
        names (list): names list to use as
            filter condition.
        exclude (bool): If set to False, keep branches in
            names list. If set to True, keep branches not in names
            list. Optional, default: False.
    Returns:
        branch (list): list of git branch objects.
    """
    heads = self.repo.heads
    if exclude:
        return [head for head in heads if head.name not in names]
    else:
        return [head for head in heads if head.name in names]
它过滤掉使用gitPython库访问的分支对象。我不知道这是否是库的特殊之处,或者它适用于所有对象,但当我使用该函数的结果排序时,它实际上并没有对这些对象进行排序

我的意思是这不起作用:

sorted(self.filter_branches_by_names(['a', 'b'])
这项工作:

sorted(self.filter_branches_by_names(['a', 'b'], key=lambda x: x.name)
我在unittests中使用sorted来检查使用该方法时是否得到了正确的分支,因此我实际上不关心它是如何排序的,只要结果和与列表的比较排序相同

所以sorted的目的是不排序对象吗?我以为它在不指定key时使用了某种默认参数来排序,或者是这里的其他东西

注意:我并不是说我希望它按名称属性排序。我要说的是,当不为排序指定键时,它根本不排序。似乎人们误解了我。

问题不在于排序,问题在于每次从gitPython repo实例访问分支时,它实际上会创建新的分支对象,因此它使用标识地址对两个具有相同分支的列表进行排序,因为这些分支不同


尽管如此,如果它们按名称排序,即使创建了新的分支对象,名称也相同,那么即使这些对象不同,它也会通过assertEqual检查。

基类对象定义了所有6种丰富的比较方法:\uuuu eq\uuu、\uu ge\uuu、\uu gt\uu等等。这些默认方法按idobj返回的整数对象标识进行比较。对于大多数目的,可以认为IDS是随机唯一整数。任何类都可以为该类的实例定义更合适的比较方法。分支对象类似乎没有。我的猜测是,类的作者希望您选择一个属性进行排序。

当然可以,但是Python怎么知道您希望按名称属性而不是按对象的自然顺序进行排序呢?请参阅。如果不提供键或比较器函数,sorted将使用对象自己的比较定义。也许您使用的这些git branch对象定义了与名称字段以外的其他对象的比较作为主键,也许它们根本没有定义比较。@jasonharper我想它没有定义比较,因为它应该按某个对象排序。@Phillip我想您没有理解我的问题。我没有说它应该按名字排序。我所说的,在不指定key时,它并没有按任何内容排序。我不在乎它的分类,只要它分类。