我正在尝试按“得分”的类属性对列表进行排序,因为内置的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
代码中出了什么问题,还有其他方法可以做到吗? 感谢您的帮助。
答案 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