与已经回答的许多关于此主题的问题相比,我有一个更基本的运行长度编码问题。从本质上讲,我试图把字符串带有列表理解的Python中的运行长度编码
string = 'aabccccaaa'
,并使其返回
a2b1c4a3
我想,如果我能设法让所有的信息到列表像我有如下图所示,我将能够轻松地返回a2b1c4a3
test = [['a','a'], ['b'], ['c','c','c','c'], ['a','a','a']]
我想出了下面的代码,到目前为止,但不知道是否有人能帮助我弄清楚如何使创建输出I画家上面已经提到过。
def string_compression():
for i in xrange(len(string)):
prev_item, current_item = string[i-1], string[i]
print prev_item, current_item
if prev_item == current_item:
<HELP>
如果任何人有任何关于更有效的方法来解决这样的问题有任何额外的意见,我都耳朵!
谢谢完美!我理解代码[list(g)for k,g in groupby(string)]是如何工作的,但我在第一部分中被捕获。你在做什么是说我有一个长度为0的字符串,并且我想要加入那个字符串来加入较大列表中较小列表的总和。我失去了在片联合(['{} {}'。format(k,sum(1 for _in g)),我想知道你是否可以更详细地解释它的工作原理? – 2014-08-29 19:38:22
@ADT:空字符串是连接符,放在所产生列表的元素之间。例如尝试'' - '.join('] ['foo','bar','spam'])'不同的木匠。也试试什么*只是'['{} {}'。格式(k,sum(1 for _in g))for k,g in groupby(string)]'list comprehension产生。 – 2014-08-29 20:19:42