Python3 - 字符串的最后一个字符
Python3 - last character of the string
我想获取字符串的最后一个字符。
我可以使用 len
方法打印它来获取它,但是在使用完全相同的方法获取它时我无法将它与另一个字符进行比较。现在我将把这段 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
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
在Python中,您可以使用负索引获取从序列末尾开始编号的项目。相应地,last 项的索引为 -1。也就是说,根本不需要您的构造 capacity[1:len(capacity)-2]
。其他人已经指出了实际发生的事情。
你得到了一个空字符串,所以没有任何东西可以索引了:
>>> ''[0]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: string index out of range
您可以通过在 while
循环中缩短 capacity
来做到这一点:
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'
您可以使用切片符号,它将 return "" 表示为空字符串:
while capacity[len(capacity)-1:] == 0
或者使用while capacity来捕捉空字符串:
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
我想获取字符串的最后一个字符。
我可以使用 len
方法打印它来获取它,但是在使用完全相同的方法获取它时我无法将它与另一个字符进行比较。现在我将把这段 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
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
在Python中,您可以使用负索引获取从序列末尾开始编号的项目。相应地,last 项的索引为 -1。也就是说,根本不需要您的构造 capacity[1:len(capacity)-2]
。其他人已经指出了实际发生的事情。
你得到了一个空字符串,所以没有任何东西可以索引了:
>>> ''[0]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: string index out of range
您可以通过在 while
循环中缩短 capacity
来做到这一点:
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'
您可以使用切片符号,它将 return "" 表示为空字符串:
while capacity[len(capacity)-1:] == 0
或者使用while capacity来捕捉空字符串:
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