2015-11-02 3 views
-2

Я хочу считать данный список, как:отсчета по заказу

list = [1 , 1, 2, 2, 4, 2, 3, 3] 

и результат будет:

2122141223 

Так что код делает подсчет по порядку, сколько раз х число в строке. В приведенном выше примере есть 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

Пожалуйста, покажи, что ты уже пробовал и то, что не работает – soon

+0

до сих пор я уже успел сделать цикл, который просто скопируйте другой список ... im застрял в основном – mars

+0

@mars отредактируйте это в свой вопрос, он нечитабелен без форматирования. – TankorSmash

ответ

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) 
+0

благодарим вас за ответ, но поскольку мы не использовали «импорт», но я не думаю, что могу его использовать пока, есть ли другой способ? – mars