排序某个值python

时间:2014-04-11 18:52:35

标签: python class sorting

class otherclass:
    def __init__(self,instance,town):
        list=[]
        for i in line.split(','):
            list.append(i)
        self.firstname = str(list[0])
        self.height = int(list[1])
    def__str__(self):
       return '%s %d' %(self.firstname,self.height)

class xray(list):
    def __init__(self, file, town):
        self.file=open(file)
        line=self.file.readlines()
        line1= line[10:]
        for g in line:
            self.append(otherclass(g,town))
    def sort1(self):
        #sort function here

所以基本上有三个类,一个是Xray,otherclass和town。 Basiclly otherclass为每个对象创建数据属性,然后xray假定读取文件并为每个项目(每一行)创建一个对象并将其附加到自我列表。然后我必须创建一些函数来对数据进行排序。例如,我必须按高度对每个人进行排序。这是我被困的地方,因为我怎么称它为基于高度的排序?所以基本上当我说x = xray(文件,镇)然后x.sort1()时,它会打印按高度排序的每个人

1 个答案:

答案 0 :(得分:1)

好像你正在犯这个错误。类用于对象,而不是将代码组合在一起。模块是将代码组合在一起。这与其他语言(例如Java)的处理方式不同。

然而,按属性排序并不困难。试试这个:

class Dummy(object):
    def __init__(self,name,height):
        self.name = name
        self.height = height

Adam = Dummy("Adam",72)
Steve = Dummy("Steve",71)
user3521527 = Dummy("user3521527",90) # damn you're tall.

dummies = [Adam,Steve,user3521527]
sorted_dummies = sorted(dummies, key = lambda x: x.height)

stdlib sort函数接受名为kwarg的{​​{1}},它接受​​一个运行排序的函数。在这种情况下,它会遍历key list,提取列表中的每个元素,将其分配给dummies,然后返回x。它根据x.height函数的返回值对元素进行排序,因此它们将根据其高度进行排序。

或者,您可以在对象中实现key

__cmp__

这告诉Python如何比较该类型的对象,因此常规class Dummy(object): def __init__(self,name,height): self.name = name self.height = height def __cmp__(self,other): """self < other if self.height < other.height""" if self.height < other.height: return -1 elif self.height == other.height: return 0 elif self.height > other.height: return 1 函数在没有关键参数的情况下工作。

sort