Mając listę pozycji, pamiętaj, że tryb listy to pozycja, która występuje najczęściej.
Chciałbym wiedzieć, jak stworzyć funkcję, która może znaleźć tryb listy, ale która wyświetla komunikat, jeśli lista nie ma trybu (np. Wszystkie pozycje na liście pojawiają się tylko raz). Chcę utworzyć tę funkcję bez importowania żadnych funkcji. Próbuję stworzyć własną funkcję od zera.
assert(mode[1, 1, 1]) == None
iassert(mode[1, 2, 3, 4]) == None
. Przez szereg byćmode
, musi wystąpić kilka razy więcej niż co najmniej jednego innego numeru na liście, a to musi nie być tylko numer na liście.Odpowiedzi:
Możesz użyć
max
funkcji i klawisza. Przyjrzyj się funkcji Pythona max przy użyciu „klucza” i wyrażenia lambda .źródło
O(n**2)
. Czy to?max(lst, key=lst.count)
. (I naprawdę nie nazwałbym listylist
.)a = [22, 33, 11, 22, 11]; print(max(set(a), key=a.count))
zwroty11
. Czy zawsze zwróci tryb minimalny? A jeśli tak, to dlaczego?Możesz użyć
Counter
dostarczonego wcollections
pakiecie, który ma funkcjęmode
-esqueUwaga: Licznik jest nowy w Pythonie 2.7 i nie jest dostępny we wcześniejszych wersjach.
źródło
Counter(your_list_in_here).most_common(1)[0][0]
. Jeśli istnieje więcej niż jeden tryb, zwraca to dowolny.n
najbardziej powszechnemodes
. Jeśli Counter (your_list_in_here) .most_common (1) [0] [0] dostaniesz pierwszy tryb, w jaki sposób uzyskałbyś inny najpopularniejszymode
? Wystarczy zastąpić ostatni0
z1
? Można stworzyć funkcję, aby dostosować jąmode
do swoich upodobań ..Python 3.4 zawiera tę metodę
statistics.mode
, więc jest to proste:Lista może zawierać elementy dowolnego typu, nie tylko liczbowe:
źródło
multimode
, który zwraca wiele trybów, gdy jest więcej niż jeden.Biorąc listek z niektórych programów statystycznych, a mianowicie SciPy i MATLAB , zwracają one tylko najmniejszą najczęściej spotykaną wartość, więc jeśli dwie wartości występują równie często, zwracana jest najmniejsza z nich. Miejmy nadzieję, że przykład pomoże:
Czy jest jakiś powód, dla którego nie możesz przestrzegać tej konwencji?
źródło
Istnieje wiele prostych sposobów na znalezienie trybu listy w Pythonie, takich jak:
Lub możesz znaleźć maksimum na podstawie jego liczby
Problem z tymi dwiema metodami polega na tym, że nie działają one z wieloma trybami. Pierwsza zwraca błąd, a druga zwraca pierwszy tryb.
Aby znaleźć tryby zestawu, możesz użyć tej funkcji:
źródło
Rozszerzając odpowiedź społeczności, która nie zadziała, gdy lista jest pusta, oto działający kod dla trybu:
źródło
Jeśli jesteś zainteresowany najmniejszym, największym lub wszystkimi trybami:
źródło
Napisałem tę przydatną funkcję, aby znaleźć tryb.
źródło
Krótkie, ale jakoś brzydkie:
Korzystanie ze słownika, nieco mniej brzydkie:
źródło
Nieco dłużej, ale może mieć wiele trybów i może otrzymać łańcuch z większością zliczeń lub mieszanki typów danych.
źródło
Przez szereg być
mode
, musi wystąpić kilka razy więcej niż co najmniej jeden inny numer na liście, a to musi nie być tylko numer na liście. Tak więc refaktoryzowałem odpowiedź @ mathwizurd (aby użyćdifference
metody) w następujący sposób:Te testy kończą się pomyślnie:
źródło
Dlaczego nie po prostu
To nie ma kilku sprawdzeń błędów, które powinien mieć, ale znajdzie tryb bez importowania żadnych funkcji i wydrukuje komunikat, jeśli wszystkie wartości pojawią się tylko raz. Wykryje również wiele przedmiotów o tej samej maksymalnej liczbie, chociaż nie było jasne, czy tego chcesz.
źródło
Ta funkcja zwraca tryb lub tryby funkcji bez względu na ich liczbę, a także częstotliwość trybu lub trybów w zbiorze danych. Jeśli nie ma trybu (tzn. Wszystkie elementy występują tylko raz), funkcja zwraca ciąg błędu. Jest to podobne do funkcji A_nagpal powyżej, ale moim skromnym zdaniem jest bardziej kompletne i myślę, że jest to łatwiejsze do zrozumienia dla wszystkich nowicjuszy w Pythonie (takich jak naprawdę), którzy czytają to pytanie, aby zrozumieć.
źródło
return 'There is no mode for this data set. All values occur only once.'
można przekształcić w komunikat o błędzie ztraceback
`` if condition: następny wiersz z podniesieniem wcięcia ValueError ('Brak trybu dla tego zestawu danych. Wszystkie wartości występują tylko raz.') Oto lista różnych typów błędy, które możesz zgłosić.Spowoduje to zwrócenie wszystkich trybów:
źródło
Prosty kod, który znajduje tryb listy bez importu:
W przypadku wielu trybów powinien zwrócić minimalny węzeł.
źródło
źródło
źródło
Oto prosta funkcja, która pobiera pierwszy tryb występujący na liście. Tworzy słownik z elementami listy jako kluczami i liczbą wystąpień, a następnie odczytuje wartości dyktowania, aby uzyskać tryb.
źródło
Jeśli chcesz mieć jasne podejście, przydatne w klasie i korzystasz tylko z list i słowników według zrozumienia, możesz:
źródło
źródło
Oto, jak można znaleźć średnią, medianę i tryb listy:
źródło
źródło
Dla tych, którzy szukają trybu minimum, np .: przypadek dystrybucji bi-modalnej, używając numpy.
źródło
Tryb zbioru danych to element (elementy), który (e) najczęściej występuje (e) w zbiorze. Jeśli istnieją dwa elementy członkowskie, które pojawiają się najczęściej z taką samą liczbą razy, dane mają dwa tryby. To się nazywa bimodalnym .
Gdyby istniało więcej niż 2 tryby, dane byłyby nazywane multimodalnymi . Jeśli wszystkie elementy w zestawie danych pojawiają się tyle samo razy, oznacza to, że zestaw danych nie ma trybu .Następująca funkcja
modes()
może działać, aby znaleźć tryb (y) na podanej liście danych:Wynik:
Jeśli nie chcemy importować
numpy
anipandas
wywoływać żadnej funkcji z tych pakietów, to aby uzyskać ten sam wynik,modes()
funkcję można zapisać jako:źródło