Python 列表推导式用于加法
我刚开始学习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])