给定一个字符串,返回一个新字符串,其中第一个和最后一个字符已被交换。
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个字符的字符串。
答案 0 :(得分:3)
对于空字符串(IndexError
),您可能会得到''
,因为str[0]
在这种情况下会超出范围。如上所述,您的代码也会为1个字符的字符串生成无效结果。要修复它,如果原始字符串的长度为< 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')