使用重复符号

时间:2015-07-14 14:20:03

标签: python compression

我正在学习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)

2 个答案:

答案 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)

在我的脑海中,我会以类似的方式做到这一点:

>>> from itertools import groupby
>>> src = 'aaaabbcccca'
>>> print ''.join([a + str(b) for a, b in [(k, sum(1 for _ in g)) for k,g in groupby(src)]])
a4b2c4a1

但我想我在the spec提供的页面上有更多的例子,Vogel612是个不错的选择。

我从那里修改了示例(使用this one)来匹配输入字符串:

{{1}}

一条整齐的衬里: - )