慕的地8271018
2021-08-24 19:12:44
我對編碼非常陌生,正在通過一些玩具問題來學習,但遇到了這個問題。(是的,我知道我不會創建好的變量名)。我試圖找到與列表中的下一個數字匹配的所有數字的總和。我讓它按順序查看項目,但當它遇到重復項時似乎被絆倒了。我運行以下代碼來檢查我的進度:code_string = "9511484596541141557316984781494999"list(code_string)for n in code_string: nextn = code_string[code_string.index(n)+1] if n == nextn: print(n)我得到的只是:1111111為什么它在我的列表中跳來跳去,而不是按順序移動到下一個?它與將字符串轉換為列表有關嗎?我想最終用一個更大的列表來做這件事。
2 回答

子衿沉夜
TA貢獻1828條經驗 獲得超3個贊
index返回字符串中數字的第一個索引并對字符串執行O(n)查找。你不想使用那個。
要么用于enumerate產生索引和值(但您必須測試索引是否不是最后一個,否則這個 +1 將使您的程序崩潰)或zip將字符串與缺少第一個元素的切片版本交錯():這提供一個項目及其后繼者。
然后你可以比較:
code_string = "9511484596541141557316984781494999"
for d1,d2 in zip(code_string,code_string[1:]):
if d1==d2:
print(d1)
輸出:
1
1
5
9
9
可以通過經典方式找到這些數字的總和,或者在一行中使用sum生成器理解(在求和之前將數字轉換為整數):
result = sum(int(d1) for d1,d2 in zip(code_string,code_string[1:]) if d1==d2)
(這是25)

翻翻過去那場雪
TA貢獻2065條經驗 獲得超14個贊
嘗試跟蹤兩個索引,而不是遍歷列表中的實際項目:
for i in range(0,len(code_string)):
if code_string[i] == code_string[i+1]:
print(code_string[i])
添加回答
舉報
0/150
提交
取消