def display_hand(hand):
for letter in hand.keys():
for j in range(hand[letter]):
print letter,
将返回如下内容:b e h q u w x
。这是所需的输出。
如何修改此代码以仅在函数完成其循环时获取输出?
像下面的代码会给我带来问题,因为在打印输出时我无法去掉字典元素,如逗号和单引号:
def display_hand(hand):
dispHand = []
for letter in hand.keys():
for j in range(hand[letter]):
##code##
print dispHand
更新我发现约翰的回答非常优雅。然而,请允许我扩展 o Kugel 的回应:Kugel 的方法回答了我的问题。但是我一直遇到一个额外的问题:该函数将始终返回 None 以及输出。原因:在 Python 中,只要您不显式地从函数返回值,就会隐式返回 None。我找不到明确返回手的方法。在 Kugel 的方法中,我靠得更近了,但手仍然埋在 FOR 循环中。
您可以通过组合几个列表理解在一行中完成此操作:
print ' '.join(letter for letter, count in hand.iteritems() for i in range(count))
让我们逐个分解。我将使用一个示例字典,其中有几个计数大于 1,以显示重复部分的工作情况。
>>> hand
{'h': 3, 'b': 1, 'e': 2}
以我们可以迭代的形式获取字母和计数。
>>> list(hand.iteritems())
[('h', 3), ('b', 1), ('e', 2)]
现在只有字母。
>>> [letter for letter, count in hand.iteritems()]
['h', 'b', 'e']
每个字母重复 count
次。
>>> [letter for letter, count in hand.iteritems() for i in range(count)]
['h', 'h', 'h', 'b', 'e', 'e']
使用 str.join
将它们连接成一个字符串。
>>> ' '.join(letter for letter, count in hand.iteritems() for i in range(count))
'h h h b e e'
我是一名优秀的程序员,十分优秀!