如何在Python中编写一个函数,该函数接受一个字符串并返回一个新字符串,该字符串是所有字符重复的原始字符串?

问题描述:

我想写一个函数,返回一个字符串是双字符输入的字符串。例如,如果输入是'hello',那么函数应该返回'hheelllloo'。我一直在尝试,但我似乎无法找到一种方法来编写函数。任何帮助将不胜感激 - 谢谢。如何在Python中编写一个函数,该函数接受一个字符串并返回一个新字符串,该字符串是所有字符重复的原始字符串?

+3

你能分享你所到目前为止已经试过?我们可以尝试纠正这一点。 – Shoban 2012-03-29 09:00:35

s = 'hello' 
''.join(c+c for c in s) 

# returns 'hheelllloo' 

用一个简单的发生器:

>>> s = 'hello' 
>>> ''.join(c * 2 for c in s) 
'hheelllloo' 
+1

我认为,这不是一个列表理解,而是一个生成器表达式。 – moooeeeep 2012-03-29 09:08:06

+0

@moooeeeep同意。 – 2012-03-29 09:09:33

def repeatChars(text, numOfRepeat): 
    ans = '' 
    for c in text: 
     ans += c * numOfRepeat 
    return ans 

要使用:
repeatChars( '你好',2)
输出: 'hheelllloo'

由于字符串是不可变的,所以并不是一个好主意如在repeatChars方法中看到的那样将它们作为一起使用。没关系,如果你操纵的文本长度很短,比如'hello',但是如果你传递'superfragilisticexpialidocious'(或更长的字符串)......你明白了。因此,作为替代方案,我已将之前的代码与@Roman Bodnarchuk的代码合并。

替代方法:

def repeatChars(text, numOfRepeat): 
    return ''.join([c * numOfRepeat for c in text]) 

为什么?阅读:Efficient String Concatenation in Python

>>> s = "hello" 
>>> "".join(map(str.__add__, s, s)) 
'hheelllloo' 

def doublechar(s): 
    if s: 
     return s[0] + s[0] + doublechar(s[1:]) 
    else: 
     return "" 
+0

很好的使用recursin,以及为什么递归是浪费在Python中用于现实世界的问题。为了学习思考它是如何工作的,它确实适合。 – jsbueno 2012-03-29 13:12:53