2015-02-07 43 views
0

我想獲取字符串的最後一個字符。 我可以使用len方法打印它,但我無法將它與另一個字符進行比較,同時使用VERY SAME方法獲取它。現在我只是在這裏粘貼這個WTF代碼。請告訴我這裏發生了什麼事。Python3 - 字符串的最後一個字符

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

你爲什麼不只是使用'能力[-1 ]'?另外,請注意'len(capacity)== 0'時會發生什麼; '''[-1]'不會起作用。 – jonrsharpe 2015-02-07 21:16:01

回答

4

你結束了一個空字符串,所以沒有什麼指數了:

>>> ''[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' 
+0

感謝您指出負指數的方法,但請解釋我如何以空字符串結束,如果我真的可以打印它的最後一個字符之前的一行代碼,我不會改變字符串。 – mekkanizer 2015-02-07 21:19:54

+0

@mekkanizer:你確實改變了'capacity'的值。在循環中,將其分配給'capacity [1:len(capacity)-2]'。 – 2015-02-07 21:20:53

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

+0

感謝您指出負指數的方法,但請解釋我如何以空字符串結束,如果我真的可以打印最後一個字符的一行代碼之前,我不會改變字符串。 – mekkanizer 2015-02-07 21:20:30

+1

@mekkanizer:在循環之前打印*,然後在循環中更改*。 – NPE 2015-02-07 21:21:00

1

在Python中,您可以通過使用負索引來獲取序列末尾的項目。相應地,最近的項目具有索引-1。也就是說,你的結構capacity[1:len(capacity)-2]根本不需要。其他人指出了實際發生的事情。

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 
相關問題