我正在学习python,最近我受到了压缩字符串练习的挑战。 输入类似于' aaaabbcccca ' 输出必须是' a4b2c4a1 '。我做到了,但我觉得我的解决方案相当笨拙。我想知道,你对这项任务的回答是什么。 我的代码是:
a = input()
l = int(len(a))
c = int()
b = str()
i = 0
while c <l:
if a[i] == a[c]:
c += 1
else:
b += (a[i] + str(c-i))
i = c
b += (a[i] + str(c-i))
print(b)
答案 0 :(得分:1)
这是另一种(ish)衬垫:
import itertools
a = "aaaabbcccca"
print "".join(["%s%u" % (g[0], len(g)) for g in [list(g) for k,g in itertools.groupby(a)]])
打印哪些:
a4b2c4a1
要了解其工作原理,您可以将该行拆分为其组件以获取:
groups = [list(g) for k,g in itertools.groupby(a)]
print groups
lengths = ["%s%u" % (g[0], len(g)) for g in groups]
print lengths
print "".join(lengths)
这将打印以下内容:
[['a', 'a', 'a', 'a'], ['b', 'b'], ['c', 'c', 'c', 'c'], ['a']]
['a4', 'b2', 'c4', 'a1']
a4b2c4a1
或者你可以同时使用k和g:
print "".join(["%s%u" % (k, len(list(g))) for k,g in itertools.groupby(a)])
答案 1 :(得分:0)