使用Python中的算法按类属性手动排序列表

时间:2018-08-06 12:48:26

标签: python python-3.x class sorting attributes

我正在尝试按“得分”的类属性对列表进行排序,因为内置的python排序函数似乎将对象的所有其他属性都设为“无”。我尝试过使函数手动执行此操作,但是当我运行它时,输入的列表的大小会像返回的列表一样减小,并且事实是该列表会重复成为同一对象。 初始列表的生成如下:

para = []
class Parameters():
    att1 = random.randint(5,125)
    att2 = random.randint(5,125)
    att3 = random.randint(30,360)
    aa4 = random.randint(2,24)
    score = random.randint(0,100)

for i in range(0,19):
    para.append(Parameters())

然后我对排序功能的尝试是:

def sortPar(slist):
    sortlist = []
    sortlist = slist
    x = []
    val = 0
    minval = 1000000
    for item1 in slist: 
        minval = 10000000
        for item in sortlist:
            if item.score < minval:
                print(item.score)
                minval=item.score
                val=item
        x.append(val)
        sortlist.remove(val)
    return x 

代码中出了什么问题,还有其他方法可以做到吗? 感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

使用排序方法排序:

import operator

para = []

class Parameters():

    def __init__(self):
        self.att1 = random.randint(5, 125)
        self.att2 = random.randint(5, 125)
        self.att3 = random.randint(30, 360)
        self.aa4 = random.randint(2, 24)
        self.score = random.randint(0, 100)


for i in range(0, 19):
    para.append(Parameters())

# using lambda
para_sorted = sorted(para, key=lambda x: x.score)
# using attrgetter
para_sorted2 = sorted(para, key=operator.attrgetter("score"))

如果您想编写自己的排序算法,请查看:https://www.tutorialspoint.com/python/python_sorting_algorithms.htm