返回字符串的中间部分

时间:2017-11-23 22:06:31

标签: python python-3.x

我必须返回字符串的中间部分。当字符串具有奇数个元素时,中间部分是一个字母,当字符串具有偶数个元素时,中间部分是两个字母。如果string为空,则返回空字符串

"help" -> "el"
"hi" -> "hi"
"hey" -> "e"

我写了一段代码:

if len(s) % 2 != 0:
    return s[len(s)//2]
elif len(s) % 2 == 0:
    return s[len(s)//2 - 1] + s[len(s)//2]

有了这个,我得到了一个neede输出,但也有一个索引超出范围的错误。错误在哪里?

2 个答案:

答案 0 :(得分:2)

问题是您编写的代码始终访问字符串中的位置。您可以为此例外添加检查。

def middle(s):
    if len(s) == 0:
        return ""
    elif len(s) % 2 != 0:
        return s[len(s)//2]
    elif len(s) % 2 == 0:
        return s[len(s)//2 - 1] + s[len(s)//2]

print(middle(""))

或者,您可以通过以下方式使代码更加精简:

def middle(s):
    offset = len(s)%2==0
    return s[len(s)//2-offset:round(len(s)/2)+offset]

print(middle("helloworld"))

答案 1 :(得分:1)

你很亲密;但是,对于偶数情况,您需要列表切片:

s = ["help", "hi", "hey"]
new_s = [i[len(i)//2] if len(i)%2 != 0 else i[(len(i)//2)-1:(len(i)//2)+1] for i in s]

输出:

['el', 'hi', 'e']

查看配对:

new_s = dict(zip(s, [i[len(i)//2] if len(i)%2 != 0 else i[(len(i)//2)-1:(len(i)//2)+1] for i in s]))

输出:

{'hi': 'hi', 'help': 'el', 'hey': 'e'}