【问题标题】:duplicating letters in string重复字符串中的字母
【发布时间】:2019-12-24 02:13:48
【问题描述】:

我有一个字符串,我想在其中重复每个字母三次并生成新字符串。

以下是我的代码,但输出如下:

<generator object <genexpr> at 0x0000020DE9F7F8B8>

而不是返回我的新字符串。

word = 'hello'
str(x*3 for x in list(word))

'''
input: 'hello'
output: 'hhheeellllllooo'
'''

【问题讨论】:

    标签: python string list list-comprehension


    【解决方案1】:

    您已经定义了一个生成器,这是一个可以在函数中使用的对象,当需要迭代器时。

    你需要在这个生成器上使用join

    ''.join(c*3 for c in word)
    

    【讨论】:

      【解决方案2】:

      当你在理解中使用括号时,你会得到一个 generator,如果你使用括号,你会得到一个 list,它可以很容易地制成所需的字符串。 据我了解,只要其中的项目是字符串,您就可以使用任何可迭代对象。

      以下代码解决了这个问题:

      word = 'hello'
      x = "".join([x*3 for x in list(word)])
      
      print(x)
      #Output: "hhheeellllllooo"
      
      

      【讨论】:

      • 您可以删除[]而不生成列表,而是使用生成器表达式,因为join()可以将生成器表达式作为参数。
      • @JanChristophTerasa,你不应该。列表推导更快。
      • @Austin 尽管你能做到这一点很重要。我听起来好像你不能(因为我没有意识到你可以!)。
      【解决方案3】:

      尽管列表理解简洁且易于使用,但它们并不适合所有情况。主要是因为他们返回......嗯,一个列表。你需要一个字符串,所以它可能不是最好的方法。一个简单的循环将在此处完成操作,无需任何转换:

      word = "hello"
      res = ""
      for c in word:
          res += c * 3
      print(res)
      

      给予:

      hhheeellllllooo
      

      【讨论】:

        【解决方案4】:

        您需要使用str.join 连接重复的字母,并且您不需要list(word) 来循环字符串,字符串已经是可迭代的:

        word = 'hello'
        print(''.join(x*3 for x in word))
        

        输出:

        hhheeellllllooo
        

        【讨论】:

        • 谢谢。另外,您是如何编辑我帖子的代码部分以使其更具可读性和灰色背景的?
        • @AmitAgarwal 请参阅format help 部分
        【解决方案5】:

        str(x*3 for x in list(word)) 返回生成器表达式(x*3 for x in list(word)) 的字符串表示形式,即您看到的输出。

        你可以试试这个:

         ''.join(c for c in word for _ in range(3))
        

        【讨论】:

        • 感谢大家的帮助
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-06-05
        • 2016-01-01
        • 1970-01-01
        • 2017-03-11
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多