【发布时间】:2018-07-21 11:50:27
【问题描述】:
我有一个看起来像这样的对象列表。
hand = [ Card(10, 'H'), Card(2,'h'), Card(12,'h'), Card(13, 'h'), Card(14, 'h') ]
Card(10, 'H) 这里不是一个元组,而是一个对象。如果列表中的每个项目都是元组的形式,我知道如何对这个列表进行排序,像这样,
hand = sorted(hand, key = lambda x: x[0])
但我不知道如何对对象列表进行排序。我想按第一个输入值对我的列表进行排序,即 Card() 中的数字
我该怎么做?
编辑:这是 Card() 的定义。
class Card(object):
RANKS = (2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14)
SUITS = ('C', 'D', 'H', 'S')
def __init__(self, rank=12, suit='S'):
if (rank in Card.RANKS):
self.rank = rank
else:
self.rank = 12
if (suit in Card.SUITS):
self.suit = suit.upper()
else:
self.suit = 'S'
def __str__(self):
if (self.rank == 14):
rank = 'A'
elif (self.rank == 13):
rank = 'K'
elif (self.rank == 12):
rank = 'Q'
elif (self.rank == 11):
rank = 'J'
else:
rank = str(self.rank)
return rank + self.suit
def __eq__(self, other):
return (self.rank == other.rank)
def __ne__(self, other):
return (self.rank != other.rank)
def __lt__(self, other):
return (self.rank < other.rank)
def __le__(self, other):
return (self.rank <= other.rank)
def __gt__(self, other):
return (self.rank > other.rank)
def __ge__(self, other):
return (self.rank >= other.rank)
【问题讨论】:
-
您应该为该类实现
__eq__或__gt__或__lt__方法,以便在比较该类的实例时设置比较逻辑应该是什么样的 -
定义 Card 会有所帮助...类中命名的变量是什么
-
@Ctznkane525 我刚刚添加了定义
-
你当前的班级没有排序怎么办?
-
x.rank 是你需要的...下面是什么...只需要知道该属性名称是什么来回答它
标签: python python-3.x sorting object