如何在Python中重复字符串中的单个字符

47
我知道

"123abc" * 2

这个表达式的结果是"123abc123abc",但是否有一种简单的方法可以将每个字母重复N次,例如将"123abc" 转换为 "112233aabbcc""111222333aaabbbccc"


1
尝试使用 for 循环和字符连接来获得所需的输出。 - dazzieta
10个回答

54

怎么样:

>>> s = '123abc'
>>> n = 3
>>> ''.join([char*n for char in s])
'111222333aaabbbccc'
>>> 

(由于在join内使用列表推导式比生成器表达式更快,因此将其更改为列表推导式)


1
啊,我喜欢使用列表推导式,不过因为某些原因我的大脑突然抽风了。 - Jason S

8

如果你想重复单个字母,你可以用n个字母替换该字母,例如:

>>> s = 'abcde'
>>> s.replace('b', 'b'*5, 1)
'abbbbbcde'

7

使用repeat()izip()chain()的另一种itertools问题过于复杂的样式选项:

>>> from itertools import repeat, izip, chain
>>> "".join(chain(*izip(*repeat(s, 2))))
'112233aabbcc'
>>> "".join(chain(*izip(*repeat(s, 3))))
'111222333aaabbbccc'

或者,采用“我懂正则表达式,我会用它来做所有事情”的方式:
>>> import re
>>> n = 2
>>> re.sub(".", lambda x: x.group() * n, s)  # or re.sub('(.)', r'\1' * n, s) - thanks Eduardo
'112233aabbcc'

当然,在实践中不要使用这些解决方案。


5

另一种方法是使用map

"".join(map(lambda x: x*7, "map"))

2

或者使用正则表达式:

>>> import re
>>> s = '123abc'
>>> n = 3
>>> re.sub('(.)', r'\1' * n, s)
'111222333aaabbbccc'

2

由于我几乎用numpy处理所有数据,因此我们现在开始:

import numpy as np
n = 4
''.join(np.array(list(st*n)).reshape(n, -1).T.ravel())

2

这是我的幼稚解决方案

text = "123abc"
result = ''
for letters in text:
    result += letters*3

print(result)

输出结果:111222333aaabbbccc


1

@Bahrom的回答可能比我的更清晰,但我想说这个问题有很多解决方案:

>>> s = '123abc'
>>> n = 3
>>> reduce(lambda s0, c: s0 + c*n, s, "")
'111222333aaabbbccc'

请注意,reduce不是Python 3中的内置函数,您需要使用functools.reduce代替。

1
另一种方式:

def letter_repeater(n, string):
    word = ''
    for char in list(string):
        word += char * n
    print word

letter_repeater(4, 'monkeys')


mmmmoooonnnnkkkkeeeeyyyyssss

是的,那是显而易见的命令式方法,不过我觉得可能还有更符合Python风格的方式。(顺便说一句,我建议使用return word而不是print word - Jason S
@JasonS,我认为其他给出的选项更符合Python风格,但它可以完成任务。同意使用return而不是print,只是觉得这样更快地传达了重点。 - af3ld
1
请注意,您无需使用 list(string) -- 字符串已经是可迭代的了。 (顺便说一句,我已经为您点赞了!) - Jason S

0

Python:

def  LetterRepeater(times,word) :
    word1=''
    for letters in word:
        word1 += letters * times
    print(word1)

    word=input('Write down the word :   ')
    times=int(input('How many times you want to replicate the letters ?    '))
    LetterRepeater(times,word)

5
欢迎。看起来这段代码需要在缩进方面进行一些额外的处理,特别是因为它是Python代码。你能编辑一下吗?另外,由于这个问题已经有了其他九个答案——包括一个被接受的答案,获得了34个赞,请确保解释你的方法与现有方法的不同之处,并说明为什么你的方法可能更受欢迎。 - Jeremy Caney

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接