为什么我用这个函数得到错误“index out of range”:
def encode(x):
diff_char = x[0]
max_ind = len(x)
i = 1
while i < max_ind and diff_char == x[i]:
i += 1
return str(i) + diff_char + encode(x[i:])
为什么我可以通过这样的if-else语句来完成?
def encode(x):
if not x:
return ""
else:
diff_char = x[0]
max_ind = len(x)
i = 1
while i < max_ind and diff_char == x[i]:
i += 1
return str(i) + diff_char + encode(x[i:])
答案 0 :(得分:2)
如果字符串为空,即x = ''
,则访问索引0将失败:
>>> x = ''
>>> x[0]
Traceback (most recent call last):
File "<pyshell#1>", line 1, in <module>
x[0]
IndexError: string index out of range
这只是因为字符串在索引0处没有第一个字符。
首先检查x
的真实性,明确处理x
为空字符串的情况。因此,在这种情况下,您只需从函数返回,x[0]
永远不会尝试读取第一个字符。
答案 1 :(得分:0)
这是因为你在这种情况下使用python manage.py migrate
&#34; i&#34;等于你的列表x的长度,并再次你递归调用你的函数,在这种情况下,如果x的长度是2然后我将在这里2和x [2:]将给你空白列表,当你调用编码函数然后你访问x [0],但你的x是空列表。