【问题标题】:sorting a list of objects_python_3对 objects_python_3 列表进行排序
【发布时间】:2018-01-04 18:37:15
【问题描述】:

我怎样才能用西装对“cardsListObj”进行排序然后排名?
我已经完成了类似“print (cardsListObj.sort (key = card.getRank))”之类的操作,但它没有用,我有“None”。
实际上,我在另一个与此完全相同的代码上执行了此操作(在我看来是新手)并且有效。 (该代码大约有 300 行,所以我没有在这里发布它)

class card :

    def __init__ (self, rank, suit) :

        self.rank = rank # cards numbers
        self.suit = suit # cards characters Diamonds, Clubs, Hearts, Spades

    def getRank (self):

        return self.rank

    def getSuit (self):

        return self.suit

def main():

    cards = open (input ("file? "))
    cardsListObj = []

    for i in cards:

        cardObj = card (i.split () [0], i.split () [1])
        cardsListObj.append (cardObj)

输入文件是一个txt文件,每行有一个数字和一个卡片名称,用空格分隔。

提前致谢

【问题讨论】:

  • 您是否在做类似print(cardsListObj.sort(... 之类的事情? .sort() 返回 None,它的实际输出是对您调用它的列表的修改。您需要单独的 print(cardsListObj) 才能查看排序列表。
  • 谢谢,我明白了“无”的意义,但是使用 print (cardsListObj) 可以通过定义的键给我排序对象的位置。我也在寻找一种在排序后按对象属性查看列表的方法。 (有可能吗?)
  • 我不确定我是否理解您的要求,但也许您需要在您的类上定义 __str__()__repr()__ 方法,以便其实例打印您想要的方式,而不是“ ".
  • 对不起,如果我的问题看起来很奇怪或难以理解,我是编程初学者。每个对象都有一个等级和西装,我正在寻找的是,[1,5,7,8,10] 如果我要按等级打印排序列表,以及 ["club", "club" , "diamond","heart", "spade"] 如果 getSuit 是排序键。
  • 试试list(card.getRank() for card in cardsListObj) - 这就是所谓的“列表理解”。

标签: list python-3.x class sorting


【解决方案1】:

如果要对卡片进行排序,可以创建如下函数:

from operator import attrgetter

def sort_cards(cards): #cards is an list containing 'Cards' objects
    """Function sorting cards"""

    return sorted(cards, key=attrgetter('suit', 'rank'))

deck = [
    Cards(3, 'Diamonds'),
    Cards(7, 'Clubs'),
    Cards(5, 'Hearts'),
    Cards(8, 'Diamonds'),
    Cards(4, 'Spades'),
    Cards(10, 'Clubs')
]
print(sort_cards(deck))

输出(你应该定义方法__repr__

['7 of Clubs', '10 of Clubs', '3 of Diamonds', '8 of Diamonds', '5 of Hearts', '4 of Spades']

注意: 在我的示例中,__repr__ 是这样的:

class Card:

[...]

def __repr__(self):
    return '%d of %s' % (self.rank, self.suit)

【讨论】:

    猜你喜欢
    • 2014-06-21
    • 1970-01-01
    • 2018-07-01
    • 1970-01-01
    • 2018-10-30
    • 2021-12-09
    • 2013-07-09
    • 2018-04-17
    相关资源
    最近更新 更多