【问题标题】:Python List Comprehension for Addition用于加法的 Python 列表理解
【发布时间】:2014-07-05 18:10:27
【问题描述】:

我是 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]

【问题讨论】:

    标签: python list-comprehension


    【解决方案1】:

    您可以简单地使用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])
    

    【讨论】:

    • 太棒了,它工作得很好,而且在这种情况下似乎比使用列表推导更好。看在我的份上,你能不能告诉我它是如何作为列表理解完成的?
    • @Cristian List Comprehension 用于创建列表,但您只是想对这些值求和。
    • 只是想根据第一条评论增加清晰度。您正在使用列表理解:它是 sum 内的列表。 Sum 只是添加列表的组件,列表推导返回列表。
    猜你喜欢
    • 1970-01-01
    • 2013-07-13
    • 1970-01-01
    • 2023-01-01
    • 1970-01-01
    • 2013-01-26
    • 2023-03-20
    • 2017-11-01
    • 1970-01-01
    相关资源
    最近更新 更多