给定一个字符串,如何用每个重复的字母生成一个新字符串?

时间:2018-11-29 11:21:04

标签: python string list-comprehension slice

给出这样的字符串:

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 slices:

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

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

但是,我想知道是否还有一种更Python化的方式来做到这一点?

3 个答案:

答案 0 :(得分: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']

答案 1 :(得分:2)

您可以定义一个生成器,该生成器生成具有重复字符的字符串:

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 :(得分:1)

只需使用一个理解列表:

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']
相关问题