Unikalne wartości czy da się lepiej

Unikalne wartości czy da się lepiej
XA
  • Rejestracja:ponad 9 lat
  • Ostatnio:około rok
  • Postów:35
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?

Kopiuj
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?

edytowany 2x, ostatnio: xarix
spartanPAGE
  • Rejestracja:prawie 12 lat
  • Ostatnio:około miesiąc
1

Możesz spróbować tak:

Kopiuj
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.

edytowany 1x, ostatnio: spartanPAGE
Zobacz pozostałe 9 komentarzy
XA
@spartanPAGE mógłbyś podać przykład jak tego użyć dla mojej funkcji unique, bo coś mi nie działa.
spartanPAGE
zaraz Ci coś sklepce;
XA
@spartanPAGE będę bardzo wdzięczny
0

Siemka!

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

Krzywy Szczur

XA
@krzywy Szczur Tak, ale nie mogę używać operacji na zbiorach.
0
Kopiuj
from collections import OrderedDict
items = [1, 2, 0, 1, 3, 2]
list(OrderedDict.fromkeys(items))
[1, 2, 0, 3]
edytowany 1x, ostatnio: bogdans
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.

0

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.