Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/279.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/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
python上的复杂排序,非常简单但有趣的bug_Python_Sorting - Fatal编程技术网

python上的复杂排序,非常简单但有趣的bug

python上的复杂排序,非常简单但有趣的bug,python,sorting,Python,Sorting,我想用“集合”或“a”进行排序。我尝试使用下面的信息 >>> sorted(student_objects, key=attrgetter('grade', 'age')) [('john', 'A', 15), ('dave', 'B', 10), ('jane', 'B', 12)] 该函数适用于“count”,但不适用于“set”、“a” class Number: def __init__(self, sets, count, a): sel

我想用“集合”或“a”进行排序。我尝试使用下面的信息

>>> sorted(student_objects, key=attrgetter('grade', 'age'))
[('john', 'A', 15), ('dave', 'B', 10), ('jane', 'B', 12)]

该函数适用于“count”,但不适用于“set”、“a”

class Number:
    def __init__(self, sets, count, a):
        self.sets = sets
        self.count = count
        self.a = a
    def __repr__(self):
        return repr((self.sets, self.count, self.a))


number_object=[([1, 3, 7], 2, 3), ([3, 7], 2, 2), ([2, 4], 2, 2), ([1, 7], 9, 2), ([1, 3], 2, 2), (7, 2, 0), (4, 2, 0), (3, 3, 0), (2, 2, 0), (1, 2, 0)]
我想使用下面的一个,但它不起作用。我用同样的方式介绍网页

sorted(student_objects, key=attrgetter('sets', 'count'))
有趣的是,计数可以工作,但另一个不行

试了几次之后,我决定用另一种方法。我可以用这个指令得到同样的结果

s=sorted(number_object, key=itemgetter(0), reverse=True )
sorted(s, key=itemgetter(1), reverse=True )

但我很好奇为什么原来的那个不起作用。是否有人擅长python???

如果您遵循您提供的链接,您将意识到必须像下面这样实例化您的对象:

number_objects = [Number([1, 3, 7], 2, 3),
                  Number([3, 7], 2, 2), 
                  .......
                 ]
那么

应该有用

例如:

from operator import attrgetter
class Number:
    def __init__(self, sets, count, a):
        self.sets = sets
        self.count = count
        self.a = a
    def __repr__(self):
        return repr((self.sets, self.count, self.a))


number_objects = [Number([1, 3, 7], 2, 3), Number([3, 7], 2, 2),
                  Number([2, 4], 2, 2), Number([1, 7], 9, 2), 
                  Number([1, 3], 2, 2)]

print sorted(number_objects, key=attrgetter('sets', 'count'))
产生:

[([1, 3], 2, 2), ([1, 3, 7], 2, 3), ([1, 7], 9, 2), ([2, 4], 2, 2), ([3, 7], 2,
2)]

您正在尝试使用不同长度的列表作为搜索键。您希望如何以有意义的方式对它们进行排序?“它不工作”是什么意思?
排序(**student**\u objects,key=attrgetter('set','count'))
?这真的没有什么意义。你的
number\u对象
根本不使用你的
number
类。如果不使用您定义的类,您希望发生什么?“有人擅长python吗?”这是一个很好的问题,不容易回答。“bug”既不琐碎也不有趣。“bug”似乎是未能实际创建预期类的对象。
[([1, 3], 2, 2), ([1, 3, 7], 2, 3), ([1, 7], 9, 2), ([2, 4], 2, 2), ([3, 7], 2,
2)]