Python代码交换字符串第一个和最后一个字母

问题描述 投票:1回答:4

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

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个字符的字符串。

python string python-2.x
4个回答
3
投票

你可能得到了一个空字符串(IndexError)的''作为str[0]会超出范围,在这种情况下。由于写的,你的代码也将产生一个1个字符的字符串无效结果。为了解决这个问题,你可以return原始的字符串,如果其长度<2。此外,它会更简单,速度更快使用字符切片:

def front_back(string):
    if len(string) < 2:
        return string
    return string[-1] + string[1:-1] + string[0]

(作为一个方面说明,不要用str一个变量名,因为它会遮蔽built-in str功能)。


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) ])

1
投票

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

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

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')
© www.soinside.com 2019 - 2024. All rights reserved.