【问题标题】:Given a string how to generate a new string with each repeated letter?给定一个字符串,如何用每个重复的字母生成一个新字符串?
【发布时间】:2018-11-29 11:21:03
【问题描述】:

给定这样的字符串:

a = 'monkeys'

b = 'hi how are you'

如何用一个重复的字符生成相同的字符串,例如:

mmonkeys
moonkeys
monnkeys
monkkeys
monkeeys
monkeyss

hhi how are you
hii how are you
hi hhow are you
hi hoow are you
hi howw are you
hi how aare you
hi how arre you
hi how aree you
hi how are yyou
hi how are yoou
hi how are youu

我尝试使用 python 切片,例如第一种和最后一种情况:

a[:1]*1+a[:-1]+a[-1]

a[:-1]+a[-1:]*2

不过,我想知道是否有更 Pythonic 的方式来做到这一点?

【问题讨论】:

  • 您只想重复字母还是任何字符(包括空格)?
  • 只有字母@MartinFrodl
  • hi how aree yyoumonkeeyys不适合
  • 是的@ThomasWeller,这是一个错误让我修复它
  • [a[:i] + a[i] + a[i:] for i in range(len(a)) if a[i].isalpha()]

标签: python string list-comprehension slice


【解决方案1】:

你可以定义一个产生重复字符的字符串的生成器:

a = 'monkeys'
b = 'hi how are you'

def repeater(x):
    for i in (idx for idx, char in enumerate(x) if char.isalpha()):
        yield x[:i] + x[i] + x[i:]

print(*repeater(a), sep=' | ')

# mmonkeys | moonkeys | monnkeys | monkkeys | monkeeys | monkeyys | monkeyss

print(*repeater(b), sep=' | ')

# hhi how are you | hii how are you | hi hhow are you | hi hoow are you |
# hi howw are you | hi how aare you | hi how arre you | hi how aree you |
# hi how are yyou | hi how are yoou | hi how are you

使用 Python 3.6+,您可以利用格式化字符串文字 (PEP498):

def repeater(x):
    for i in (idx for idx, char in enumerate(x) if char.isalpha()):
        yield f'{x[:i]}{x[i]}{x[i:]}'

【讨论】:

    【解决方案2】:
    def repeat(chars, num=1):
        return [chars[:index] + char * num + chars[index:] for index,char in enumerate(chars) if char != ' ']
    
    
    repeat('monkeys', 1)
    # ['mmonkeys', 'moonkeys', 'monnkeys', 'monkkeys', 'monkeeys', 'monkeyys', 'monkeyss']
    repeat('monkeys', 2)
    # ['mmmonkeys', 'mooonkeys', 'monnnkeys', 'monkkkeys', 'monkeeeys', 'monkeyyys', 'monkeysss']
    repeat('hi how are you', 1)
    # ['hhi how are you', 'hii how are you', 'hi hhow are you', 'hi hoow are you', 'hi howw are you', 'hi how aare you', 'hi how arre you', 'hi how aree you', 'hi how are yyou', 'hi how are yoou', 'hi how are youu']
    

    【讨论】:

    • 当我读到这篇文章时,我不明白它在做什么。如果那是 pythonic,我不喜欢 Python :-)
    • 你如何控制那里重复字符的数量?...如果现在我想要 3 而不是 2 怎么办?
    • @anon:这不是你的问题。请不要在您提出问题后更改范围。
    • @anon;然后把a[:i] + w + a[i:]改成a[:i] + w*2 + a[i:]
    【解决方案3】:

    只需使用理解列表:

    a = 'monkeys'
    
    result = [a[:i] + a[i] + a[i:] for i in range(len(a)) if a[i].isalpha()]
    
    ['mmonkeys', 'moonkeys', 'monnkeys', 'monkkeys', 'monkeeys', 'monkeyys', 'monkeyss']
    

    【讨论】:

      猜你喜欢
      • 2012-02-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-04
      • 1970-01-01
      • 2017-04-05
      • 1970-01-01
      • 2013-05-07
      相关资源
      最近更新 更多