給定一個字串“ a1a3b5a2c4b1 ”。字符后跟數字,表示該字符在字串中出現的次數。正確的解決方案將回傳 "a6b6c4" (a1 a3 a2 = a6, b5 b1 = b6, c4)
我最初的想法是將字串轉換為串列,然后轉換為鍵值對的字典。
data="a1a3b5a2c4b1"
lst = list(data)
{lst[i]: lst[i 1] for i in range(0, len(lst), 2)}
回傳:
{'a': '2', 'b': '1', 'c': '4'}
問題在于它不會增加出現次數(值),而是采用最后看到的值。
如何創建一個增加值而不是替換它們的字典?
uj5u.com熱心網友回復:
您繼續使用該理解中的最新計數覆寫密鑰。您必須通過添加來更新它們:
data = "a1a3b5a2c4b1"
counts = {}
i = iter(data)
for char, count in zip(i, i):
counts[char] = counts.get(char, 0) int(count)
# {'a': 6, 'b': 6, 'c': 4}
處理計數的另一個自然實用程式是 a collections.Counter:
from collections import Counter
counts = Counter()
i = iter(data)
for char, count in zip(i, i):
counts.update(**{char: int(count)})
這也使用“zip相同的迭代器”技巧來生成 2 的塊。 AS 將這些字典轉換為所需的字串輸出:
"".join(f"{k}{v}" for k, v in counts.items())
uj5u.com熱心網友回復:
如果字串基于成對序列,其中第一個字符是您的鍵,第二個字符是單個數字,則:
mystring = 'a1a3b5a2c4b1'
mydict = dict()
for i in range(0, len(mystring), 2):
pair = mystring[i:i 2]
key = pair[0]
value = int(pair[1:])
if key in mydict:
mydict[key] = value
else:
mydict[key] = value
print(mydict)
您可以使用 defaultdict 和/或字典理解,但我認為這更清楚
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/335891.html
