2014-12-08 4 views
1

Мне нужно написать функцию, которая принимает список любого размера в качестве аргумента и возвращает список, в котором все смежные равные элементы были сведены к одному элементу. Например, [1, 2, 2, 3] вернутся как [1, 2, 3].Как смежные элементы сводятся к одному элементу

это должно быть сделано в питона

да это внеклассная работа

я не совсем уверен, что делать для некоторых это.

def func1(x): 

    list1 = x 
    for i in x: 
     for n in list1: 
      if i == n: 
       list2 = i 
       print(list2) 
    return; 
a = [1,2,2,3] 
func1(a) 
+0

'[x for x, g in itertools.groupby (a)]' - но это скорее всего не то решение, которое вы должны дать. Расскажите, какие у вас конкретные проблемы, и мы сможем вам помочь. Но вот так, ваш вопрос слишком неспецифичен. – poke

+0

Дубликат [Удалить соседние повторяющиеся элементы из списка] (http://stackoverflow.com/q/3460161/2823755) – wwii

ответ

3

Легкий способ

>>> from itertools import groupby 
>>> a = [1,2,2,3] 
>>> [k for k, v in groupby(a)] 
[1, 2, 3] 

Если вы должны были сделать это вручную, просто отслеживать последний элемент, который вы видели, и проверить она с каждым элементом вы итерацию над

def func1(x): 
    result = [] 
    last = None 
    for i in x: 
     if i != last: 
      result.append(i) 
     last = i 

    return result 

a = [1,2,2,3] 
print func1(a) 

РИСКОВАННАЯ: если ваш список может содержать None с, а затем сделать last = object() (совершенно уникальный объект) вместо last = None так None может быть первым элементом списка и, следовательно, получить пропускаются ,

0

вы можете сделать более вещий с помощью:

sorted(set(x)) 

т.е.

a = [1,2,3,2,3] 
a = sorted(set(a) 
print(a) 
+2

«смежные, равные элементы» – poke

+0

я не видел соседнего (LOL) – nishparadox

+0

плохо попробуйте с тем, что у меня есть и посмотреть, работает ли он – clutchcocobean