Учитывая строку, как генерировать новую строку с каждой повторяющейся буквой? - PullRequest
0 голосов
/ 29 ноября 2018

С учетом строки, подобной этой:

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

Я пытался использовать кусочки питона, например, для первого и последнего случая:

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

или

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

Однако я хотел бы знать, есть ли ещепитонский способ сделать это?

Ответы [ 3 ]

0 голосов
/ 29 ноября 2018

Вы можете определить генератор, который выдает строки с повторяющимися символами:

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:]}'
0 голосов
/ 29 ноября 2018

Просто используйте список понимания:

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']
0 голосов
/ 29 ноября 2018
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']
...