Python 列表推导式用于加法

0 投票
1 回答
4892 浏览
提问于 2025-04-18 12:13

我刚开始学习Python,想把一个函数转换成列表推导式,但遇到了一些困难。这个推导式涉及到一个叫value的函数,包含这个函数的类如下:

class Card(object):

    # Lists containing valid candidates for a card's rank and suit.
    suits = [None, "spade", "club", "heart", "diamond"]
    ranks = [None, "ace", "two", "three", "four", "five", "six", 
             "seven", "eight", "nine", "ten", "jack", "queen", "king"]

    # Dictionary containing the ranks and their associative values.
    values = {None:0, "ace":1, "two":2, "three":3, "four":4,
              "five":5,"six":6,"seven":7, "eight":8,"nine":9,
              "ten":10, "jack":10, "queen":10, "king":10}

    def __init__(self, rank=None, suit=None):
        """Constructor."""
        if rank not in self.ranks:
            raise ValueError("Invalid rank.")
        if suit not in self.suits:
            raise ValueError("Invalid suit.")
        self.rank = rank
        self.suit = suit

    def __str__(self):
        """A string representation of the Card."""
        return "{0}:{1}".format(self.rank, self.suit)

还有一个不同的类,它创建了一些Card对象,并定义了以下函数:

def value(self):
    """Returns an int value containing the summed values of the hand's cards."""
    result = 0
    for card in self.cards:
        result += Card.values[card.rank]
    return result

从我看到的情况来看,value函数是可以用列表推导式来写的,但我一直搞不定。我觉得下面的写法应该是对的,但总是出现语法错误,我不知道哪里出了问题。请注意,我对Python和列表推导式还很陌生:

def value(self):
    result = [x += y for x = Card.values[y.rank] for y in self.cards]

1 个回答

4

你可以简单地使用 sum 函数和一个生成器表达式,像这样

def value(self):
    return sum(Card.values[card.rank] for card in self.cards)

如果你想用列表推导式,那么你可以把生成器表达式转换成列表推导式的写法,像这样

def value(self):
    return sum([Card.values[card.rank] for card in self.cards])

撰写回答