这是我班级的样子:
class Item:
def __init__(self, name, is_old, is_init):
self.name = name
self.is_old = is_old
self.is_init = is_init
我有一个这些对象的列表,我想对它们进行排序:如果is_init参数为true,则它们必须位于列表的前面,如果is_old参数为true,则它们必须在最后的清单。其他人应该在中间。我还想为每个对象生成一些计数(有多少个is_old参数为true,有多少有is_init参数为true等)。
我一直在用这个:
is_init_count = sum(p.is_init == True for p in item_list)
is_old_count = sum(p.is_old == True for p in item_list)
other_count = len(item_list) - is_init_count + is_old_count
但我认为可能有更多的pythonic方式,这可以与排序一起完成。
答案 0 :(得分:0)
您可以使用返回您感兴趣的属性元组的键进行排序:
item_list = sorted(item_list, key=lambda x: (not x.is_init, x.is_new))
请注意,is_old
参数在您的班级中保存为self.is_new
,这可能会导致一些混淆。
接下来,您可以循环浏览此列表并计算您感兴趣的所有属性:
init = 0
old = 0
for i in item_list:
if i.is_init:
init += 1
if i.is_new:
old += 1