计算字符串中字符出现的次数?



给定字符串">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'}

问题是它不会增加出现的次数(值),而是取最后看到的值。

如何创建一个增加值而不是替换值的字典?

继续用该推导式中的最新计数覆盖键。您必须通过添加来更新它们:

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}
处理计数的另一个自然util是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块的技巧。至于将这些字典转换为所需的字符串输出:

"".join(f"{k}{v}" for k, v in counts.items())

如果字符串基于对序列,其中第一个字符是关键字,第二个字符是单个数字,则:

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和/或字典理解但我认为这样更清楚

最新更新