按订单计算清单

时间:2015-11-02 20:32:01

标签: python python-2.7 python-3.x

我想计算一个给定的列表,如:

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

这就是我所做的,我不知道如何继续。

我试图做的是一个循环来检查数字是否相同,如果是,它们将继续下一个数字,直到它以不同的数字运行。

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)