Python3 - 字符串的最后一个字符

时间:2015-02-07 21:14:26

标签: python string python-3.x

我想得到字符串的最后一个字符。 我可以使用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

4 个答案:

答案 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