【问题标题】:Repeat string keys of dict based on integer value and form a single string [closed]基于整数值重复dict的字符串键并形成单个字符串[关闭]
【发布时间】:2016-12-13 22:04:24
【问题描述】:

是否可以将 for 循环中的多个打印保存为字符串变量?

例如我有一本字典,其中有字母作为键,每个键的值表示应该多久打印一次键。整体打印输出应该只是一个字符串,然后将其保存为变量。简化示例:

hand = {'a':1, 'q':1, 'l':3, 'm':1, 'u':1, 'i':1}
for letter in hand.keys():
    for j in range(hand[letter]):
        print(letter, end="") #should print out e.g. uilllqma

我知道我可以在 for 循环的每次迭代中将项目附加到(空)列表中,但是,我想知道我是否可以直接从打印输出中执行此操作(无需先添加到列表然后再打印列表作为字符串)。

a = ... #assign e.g. uilllqma to a
print(a) #prints 'uillqma'

【问题讨论】:

  • 'uillqma' 的值是从哪里来的,所以它可以分配给变量a

标签: python string python-3.x dictionary


【解决方案1】:

字符串与整数值相乘,例如n,将原始字符串的值重复n 次。例如:

>>> hand = {'a':1, 'q':1, 'l':3, 'm':1, 'u':1, 'i':1}
>>> for k, v in hand.items():
...     print(k * v)
...
a
i
m
lll
q
u

因此,为了将所有结果作为单个字符串获取,您可以将 generator 表达式加入为:

>>> ''.join(k*v for k, v in hand.items())
'aimlllqu'

【讨论】:

  • 非常流畅!谢谢!
【解决方案2】:

您知道dict 不能保证订单是无序的。

但您可以使用生成器表达式执行join()

>>> print(''.join(k for k, v in hand.items() for _ in range(v)))
lllmaiuq

【讨论】:

  • 是的,知道这一点,但在这种情况下并不重要。感谢您的解决方案,效果很好
【解决方案3】:

或者你可以简单地连接字母:

hand = {'a':1, 'q':1, 'l':3, 'm':1, 'u':1, 'i':1}
new_str = ""
for letter in hand.keys():
    for j in range(hand[letter]):
        new_str += letter

但使用 .join() 会更简洁。

【讨论】:

    猜你喜欢
    • 2017-02-15
    • 1970-01-01
    • 2019-09-16
    • 2020-09-26
    • 1970-01-01
    • 1970-01-01
    • 2023-03-06
    • 2019-07-16
    • 2014-01-07
    相关资源
    最近更新 更多