我想计算一个给定的列表,如:
list = [1 , 1, 2, 2, 4, 2, 3, 3]
,结果将是:
2122141223
所以代码所做的是按顺序计算x数在行中的次数。在上面的例子中有1然后是另一个1,所以= 2(出现次数)1(数字本身)
list = [1, 1, 2, 1, 4, 6]
i = 0
n = len(list)
c = 1
list2 =[]
while i in range(0, n) and c in range (1 , n):
if list[i] == list[i+1]:
listc= i+c
listx = str(listc)
list2.insert(i, i+c)
i += 1
c += 1
else:
f = i + 1
i += 1
c += 1
这就是我所做的,我不知道如何继续。
我试图做的是一个循环来检查数字是否相同,如果是,它们将继续下一个数字,直到它以不同的数字运行。
答案 0 :(得分:3)
您可以使用Python groupby
函数,如下所示:
from itertools import groupby
my_list = [1, 1, 2, 2, 4, 2, 3, 3]
print ''.join('{}{}'.format(len(list(g)), k) for k,g in groupby(my_list))
给你以下输出:
2122141223
k
为您提供密钥(例如1,2,4,2,3),g
给出一个迭代器。通过将其转换为列表,可以确定其长度。
或者,如果不使用groupby
功能,您可以执行以下操作:
my_list = [1, 1, 2, 2, 4, 2, 3, 3]
current = my_list[0]
count = 1
output = []
for value in my_list[1:]:
if value == current:
count += 1
else:
output.append('{}{}'.format(count, current))
current = value
count = 1
output.append('{}{}'.format(count, current))
print ''.join(output)