Python代码用于交换字符串中的第一个和最后一个字母

时间:2016-06-15 14:16:09

标签: python string python-2.x

给定一个字符串,返回一个新字符串,其中第一个和最后一个字符已被交换。

front_back('code') → 'eodc'
front_back('a') → 'a'
front_back('ab') → 'ba'

以上是www.codingBat.com上提供的问题之一我试图解决,下面是我写的代码。

def front_back(str):     
    str = list(str)
    first = [str[0]]
    last = [str[-1]]
    middle = str[1:-1]
    print ''.join (last + middle + first)

现在,当我在计算机上的python 2.7中运行它时,这段代码似乎工作正常,但在代码棒上运行时,我收到以下错误:“错误:列表索引超出范围”

现在我觉得我对这个错误意味着什么很好,但我不明白为什么我得到它,因为我引用的任何索引基本上保证是至少2个字符的字符串。

4 个答案:

答案 0 :(得分:3)

对于空字符串(IndexError),您可能会得到'',因为str[0]在这种情况下会超出范围。如上所述,您的代码也会为1个字符的字符串生成无效结果。要修复它,如果原始字符串的长度为&lt; return,则可以def front_back(string): if len(string) < 2: return string return string[-1] + string[1:-1] + string[0] 。 2.此外,使用字符串切片会更简单(也更快):

str

(作为旁注,不要将str用于变量名称,因为它会影响built-in {{1}}函数。

答案 1 :(得分:1)

你的问题是1个字符,即。 front_back('a') → 'a'。考虑如何根据这种情况调整功能。

编辑:我不喜欢其他答案的效率或一般性,所以我将在下面发布我的解决方案:

def front_back(str):
    return ''.join([x if i not in [0,len(str)-1] else str[len(str)-i-1] for i,x in enumerate(str) ])

答案 2 :(得分:1)

保持简单以避免特殊情况:

def front_back(string):
    array = list(string)
    array[0], array[-1] = array[-1], array[0]
    return "".join(array)

答案 3 :(得分:0)

我假设网站使用一系列随机/伪随机字符来确定您的代码是否提供了正确的输出。如果是这样,那么len() == 1字符串将返回错误。即'h' return 'hh'。我修改了代码来纠正这个问题。假设网站还要求您返回数据而不是打印我也考虑到了这一点。祝你好运!

def front_back(str):
    if len(str) > 1:
        str = list(str)
        first = [str[0]]
        last = [str[-1]]
        middle = str[1:-1]
        return ''.join (last + middle + first)
    else:
        return str

print front_back('h')