我必须返回字符串的中间部分。当字符串具有奇数个元素时,中间部分是一个字母,当字符串具有偶数个元素时,中间部分是两个字母。如果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输出,但也有一个索引超出范围的错误。错误在哪里?
答案 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'}