2014-10-24 3 views
0

Итак, я пытаюсь удалить повторяющиеся символы из следующих 2 списков, которые у меня есть, мой код работает для Int, но не для моих строк!Удаление повторяющихся символов из списка в python

Любые советы? код выглядит следующим образом:

list = [0,1,0,1,2,2,3,4,5,7,9,8,10,1,1,3,4,5,6,7,8,9,10] 

list2 = ['z','r','a','z','x','b','z','a','f','f','f','x','t','t','o','p','a','b','v','e','q','p','c','x'] 

for i in list: 

    list.sort() 
    compteur = 0 

    while compteur < len(list): 

     if i == list[compteur]: 

      list.remove(list[compteur]) 
      compteur+=1 
     elif i != list[compteur]: 
      compteur+=1 

Under для I в списке: все должно быть отступом ИДК, почему я не был в состоянии сделать это появится правильный путь.

+1

Почему бы не использовать набор? –

+0

Я разбираюсь в основах, просто прошел через набор, и да, это упростило ситуацию. Но нам пока не разрешено использовать их ... Спасибо! – glls

+0

Ну, это тоже работает для строк ('list2'). [Посмотрите] (http://repl.it/2Tt). –

ответ

1

Как вы сказали, что вы не можете сделать использование наборов, вы можете сделать его проверку каждого элемента и вставить его на третьих уникальных элементах список как:

int_list = [0,1,0,1,2,2,3,4,5,7,9,8,10,1,1,3,4,5,6,7,8,9,10] 

char_list = ['z','r','a','z','x','b','z','a','f','f','f','x','t','t','o','p','a','b','v','e','q','p','c','x'] 

Пример с int_list:

unique_list = [] 
for el in int_list: 
    if el not in unique_list: 
     unique_list.append(el) 
    else: 
     print "Element already in the list" 

Результат будет выглядеть так:

>>> print unique_list 
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 
+0

TY для вашего поста, я ценю вашу помощь! Я считаю, что unique_list.append [el] должен быть unique_list.append (el) – glls

+0

Вы правы, опечатка исправлена. Спасибо –

+0

Я даже не думал об использовании if el в «новом списке», TY sir – glls

1

Если вы не можете использовать наборы, вы можете сделать это, это будет работать для обоих ваших списков.

int_list = [0,1,0,1,2,2,3,4,5,7,9,8,10,1,1,3,4,5,6,7,8,9,10] 

ints = [] 
for i in int_list: 
    if i not in ints: 
     ints.append(i) 
ints.sort() 

>>> print ints 
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 

И для списка символов:

char_list = ['z','r','a','z','x','b','z','a','f','f','f','x','t','t','o','p','a','b','v','e','q','p','c','x'] 

chars = [] 
for i in char_list: 
    if i not in chars: 
     chars.append(i) 
chars.sort() 

>>> print chars 
['a', 'c', 'b', 'e', 'f', 'o', 'q', 'p', 'r', 't', 'v', 'x', 'z'] 
+0

TY, очень оценен! – glls

0

Это старый вопрос, но я оставляю этот ответ здесь

from collections import Counter 
def dup_remover(lst): 
    return list(Counter(lst)) 

>>> dup_remover(list2) 
['a', 'c', 'b', 'e', 'f', 'o', 'q', 'p', 'r', 't', 'v', 'x', 'z'] 
+0

Почему 'ele [0]'? Для общего случая «сохранить только первую копию» ответ еще проще, чем вы его делаете: 'def dup_remover (lst): return list (Counter (lst))'. Ручное создание «списка» с 'append's - глупо; вы уже итерируете совершенно хороший 'list', так что просто верните его. В любом случае, спрашивающий говорит, что они не могут использовать 'set', поэтому я сомневаюсь, что они могли бы использовать« Counter ». – ShadowRanger

+0

@ShadowRanger, что вы сказали, правда, я был в иллюзии, что я использую кортежи, которых это действительно не так. Обновлено сейчас. Проблема решена, но я просто оставил это здесь, чтобы показать, что это может быть сделано через Counter также для дальнейшего использования. – Harwee

Смежные вопросы