我正在学习Python,我想更多关于如何对列表进行排序的信息。我知道在列表中的字符串和列表中的列表以及列表中的整数以及依次排序中有很多,但我想知道的是如何在列表中对对象进行排序(它会可能有助于其他语言)。就像说我有这个:
import random
class Example()
def __init__(self):
self.choose_if_special = randint(0,10)
self.special = None
def see_if_special(self):
"""determines if it is special"""
if self.choose_if_special == 3:
self.special = True
else:
self.special = False
list = []
max_examples = 10
for i in range(0, max_examples):
#pushes max_examples Example(s) to list list
list.append(Example())
for j in list:
#prints not sorted list
print(j)
但是,如果我希望所有的函数首先打印.special = True,那么该怎么办?是否有可以执行此操作的特定功能?或者你还要做别的事吗?我已经想过并查看了一些可能的解决方案,但只是为了确保我不浪费时间在Python或其中一个库中是否有这样的功能?如果不是,那么对列表进行排序的最快捷,最有效的方式是什么(因此它不会运行得更慢)?
答案 0 :(得分:0)
从快速谷歌我发现Python有一个名为sorted的函数,可以在这种情况下使用。在你的情况下:
sorted_objects = sorted(list_of_objects, key=lambda object: object.special, reverse=True)
答案 1 :(得分:0)
如果要在自己的类中实现排序(不会更改),请定义__lt__
(对于<
运算符),__lte__
(对于<=
运算符),__gt__
运算符为>
,__gte__
运算符为>=
运算符。 j.sort
或sorted(j)
会自动使用您定义的排序对列表进行排序。
如果要在整个代码中使用不同的方式进行排序,请使用命名参数key=some_function
(对于list.sort
和sorted
)。 key
函数被赋予列表的元素,该函数的结果将用于决定它的排序方式。例如:
for e in list:
e.see_if_special()
for e in sorted(list, key=lambda x: x.special):
print(e)
将首先打印所有.special == False
的元素,然后打印.special == True
的元素。
答案 2 :(得分:0)
总之,您可以使用内置函数:sort
或sorted
。不同之处在于,使用sort
您将更改原始列表,而使用sorted
则不会。
首先,您需要为每个列表示例对象相应地设置特殊值:
for example in list:
example.see_if_special()
之后,您可以在列表中执行sort
:
list.sort(key=lambda example: int(example.special), reverse=True)
或者在不修改原始列表的情况下生成新列表:
sorted(list, key=lambda example: int(example.special), reverse=True)