Unikalne wartości czy da się lepiej

0

Mam do napisania funkcję, która ma zwracać unikalne wartości. Napisałem coś takiego, można to zrobić jakoś lepiej nie używając zbiorów?

def unique(values):
    if values == []:
        return []
    else:
        values.sort()
        result = []
        for i in range(len(values)-1):
            if values[i] != values[i+1]:
                result.append(values[i])
        result.append(values[len(values)-1])
        return(result)

W zadaniu też jest wskazówka :Mozna zamienic liste na liste par zawierajacych wartosc woryginalnej liscie i pozycje, nastepnie te liste posortowac, usunac duplikaty wartosci i posortowac jeszcze raz ze wzgledu na pozycje.
Czy wykonanie tego według tej wskazówki czy tak jak ja zrobiłem?

1

Możesz spróbować tak:

from functools import reduce

def unique(list_):
	return reduce(lambda l, x: l if x in l else l+[x], list_, [])
	
print(unique([1, 1, 3, 1, 3, 2, 8, 7]))

http://ideone.com/ilR4Xb

W ten sposób przy okazji unikniesz zmiany klejności elementów.

0

Siemka!

Czy masz uzyskać po prostu listę z różnymi elementami (uniknąć powtórzeń elementów) ?

Krzywy Szczur

0
from collections import OrderedDict
items = [1, 2, 0, 1, 3, 2]
list(OrderedDict.fromkeys(items))
[1, 2, 0, 3]
0

Szczur Tak, ale nie mogę używać operacji na zbiorach

Nooo to zmienia postać rzeczy.

Ale złoty młot przedstawił chyba najlepsze rozwiązanie.

1 użytkowników online, w tym zalogowanych: 0, gości: 1