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
更新 我发现John的答案非常优雅。但是请允许我扩展Kugel的回应: 库格尔的方法回答了我的问题。但是我继续遇到另一个问题:函数总是会返回None和输出。原因:每当您没有从Python中的函数显式返回值时,将隐式返回None。我找不到明确归还手的方法。在库格尔的方法中我靠近了,但手仍然被埋在FOR循环中。
答案 0 :(得分:3)
您可以通过组合几个列表推导来在一行中完成此操作:
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'
答案 1 :(得分:1)
你的##代码可能吗?
dispHand.append(letter)
<强>更新强>:
要打印列表,请:
for item in dispHand:
print item,
答案 2 :(得分:1)
没有嵌套循环的另一个选项
"".join((x+' ') * y for x, y in hand.iteritems()).strip()
答案 3 :(得分:0)
使用
" ".join(sequence)
打印一个没有逗号和括号的序列。
如果序列中有整数或其他内容
" ".join(str(x) for x in sequence)