我想得到字符串的最后一个字符。
我可以使用len
方法打印它以获取它但是我可以在使用VERY SAME方法获取它时将其与另一个字符进行比较。现在我只需在此粘贴此 WTF 代码。请告诉我这里发生了什么。
fields = line.split(';')
last = fields[0]
capacity = fields[1]
region = fields[2]
print(capacity)
print('kek')
print(capacity[len(capacity)-1])
print('even more kek')
while capacity[len(capacity)-1] == '0':
capacity = capacity[1:len(capacity)-2]
last = last[1:len(last)-2]
现在,输出
100000
kek
0
even more kek
Traceback (most recent call last):
File "/home/mekkanizer/Документы/proj/rossvyaz/making_insert_queries.py", line 52, in <module>
while capacity[len(capacity)-1] == '0':
IndexError: string index out of range
答案 0 :(得分:4)
你最后得到一个空字符串,所以没有什么可以索引了:
>>> ''[0]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: string index out of range
您可以通过缩短capacity
循环中的while
来实现此目的:
capacity = capacity[1:len(capacity)-2]
您从100000
开始,然后制作'000'
,然后''
:
>>> capacity = '100000'
>>> capacity[1:len(capacity)-2]
'000'
>>> capacity[1:len(capacity)-2][1:len(capacity)-2]
''
您可能错过了这样做,因为您从未在循环中打印capacity
的值。
您始终可以使用负数索引从开始索引:
>>> 'last character'[-1]
'r'
这也适用于切片:
>>> 'last character'[5:-4]
'chara'
答案 1 :(得分:1)
Traceback (most recent call last):
File "/home/mekkanizer/Документы/proj/rossvyaz/making_insert_queries.py", line 52, in <module>
while capacity[len(capacity)-1] == '0':
IndexError: string index out of range
唯一可能发生这种情况的情况是capacity
为空字符串,len(capacity)-1
因此为-1
,这不是空字符串的有效索引。
这在循环的第一次迭代期间不会发生(您已经检查过),但是在缩短capacity
后,在后续迭代期间确实会发生这种情况。
我的建议是阅读Python的切片符号,特别是使用负索引来引用字符串的结尾。一个好的资源是Explain Python's slice notation
答案 2 :(得分:1)
在Python中,您可以使用负索引从序列末尾获取编号的项目。相应地, last 项的索引为-1。也就是说,根本不需要你的构造capacity[1:len(capacity)-2]
。其他人已经指出了实际发生的事情。
答案 3 :(得分:1)
您可以使用切片表示法,它将为空字符串返回“”:
while capacity[len(capacity)-1:] == 0
或使用容量来捕捉空字符串:
while capacity and capacity[-1] == "0":
在while循环中重新分配capacity
时,你会不断缩短容量,所以最终它将是一个空字符串:
capacity = capacity[1:len(capacity)-2]
foobar foobar <- start
oobar foob <- first iteration
obar fo <- second iteration
bar <- third iterations
a <- fourth iteration
empty string == index error