你不能索引過去的字符串長度,你可以從尾部切片一個string[:-1]
,但你可以避免切片你可以使用for循環和iter
:
s = "LOLOLO"
def adj(s):
# iter create an iterator
it, sm = iter(s), 0
# pull first character and set prev equal to it
prev = next(it)
# iterate over all bar the first char
for ch in it:
# if previous is not equal to current char add 1 to sm
if ch != prev:
sm += 1
# set prev to current char
prev = ch
# catch last char
return sm + (prev != ch)
輸出:
In [3]: adj(s)
Out[3]: 5
您也可以欺騙一個位與羅列,您可以用切片,這將不會導致IndexError,你也可以使用builti Ñsum
函數來如此計數:
def adj(s):
return sum(ch != s[i:i+1] and i < len(s) for i, ch in enumerate(s, 1))
print(adj(s))
枚舉也需要啓動ARG這是一個在此情況下,所以我們在第二字符開始索引。
應用相同的邏輯來自己的循環:
def adjacent_numbers(string):
count = 0
for i,c in enumerate(string, 1):
if i < len(s) and c != string[i:i+1]:
count += 1
return count
i
在你的代碼並不需要任何所以我刪除它,你就不需要在初始化變量蟒,i
將工作在精細循環。
單字或字符?如果出現錯誤,請在問題描述中添加錯誤。 –
通過for循環爲您填寫'i'的值。你可以刪除'i = 0'和'i + = 1'。 –
對不起,它應該是字符 – Reboot