Jeśli chcę mieć maksymalną wartość na liście, mogę po prostu napisać max(List)
, ale co, jeśli potrzebuję również indeksu maksymalnej wartości?
Mogę napisać coś takiego:
maximum=0
for i,value in enumerate(List):
if value>maximum:
maximum=value
index=i
Ale wydaje mi się to nudne.
A jeśli napiszę:
List.index(max(List))
Następnie dwukrotnie iteruje listę.
Czy jest lepszy sposób?
Odpowiedzi:
Opcji jest wiele, na przykład:
źródło
key
Funkcja służy tylko do decydowania, który element jest maksymalny. Elementy nie ulegają zmianie.key=lambda e: e[1]
zamiast tego nie uniknąć importu?itemgetter()
jest szybsze, a unikanie importu nie jest celem, do którego warto dążyć. W niektórych przypadkach warto unikać zewnętrznych zależności, ale import z biblioteki standardowej nie stanowi problemu.Myślę, że zaakceptowana odpowiedź jest świetna, ale dlaczego nie zrobisz tego wprost? Wydaje mi się, że więcej ludzi zrozumie Twój kod i jest to zgodne z PEP 8:
Ta metoda jest również około trzy razy szybsza niż zaakceptowana odpowiedź:
Wyniki wyświetlane na moim komputerze:
Inny zestaw:
źródło
numpy.argmax()
, co jest kolejne 30 razy szybsze na moim komputerze. Jeśli lista zawiera bardziej skomplikowane obiekty niż same liczby, podejście w mojej odpowiedzi może stać się szybsze. Inną zaletą tego podejścia jest to, że można go używać do dowolnych iteratorów, a nie tylko do list.Ta odpowiedź jest 33 razy szybsza niż @Escualo przy założeniu, że lista jest bardzo duża i przy założeniu, że jest to już np.array (). Musiałem zmniejszyć liczbę przebiegów testowych, ponieważ test dotyczy 10000000 elementów, a nie tylko 100.
Wyniki na moim komputerze:
źródło
numpy.argmax
wygląda niesamowicie, dopóki nie pozwolisz mu przetworzyć standardowej listy Pythona. Wtedy prędkość leży między wersją jawną i niejawną. Wydaje mi się, żenp.array
nie tylko tworzy listę, ale zapisuje w niej dodatkowe informacje - na przykład wartości minimalne i maksymalne (tylko hipoteza).Dzięki wbudowanej bibliotece Pythona jest to całkiem proste:
Mówi to,
max
aby znaleźć największą liczbę na liście[0, 1, 2, ..., len(a)]
, używając funkcji niestandardowejlambda x: a[x]
, która mówi, że0
tak jest2
,1
jest w rzeczywistości9
itd.źródło
źródło
max
wiadomo, żev
przy obliczaniu maksymalnej wartości należy wziąć pod uwagę po prostu pierwszy element każdej krotki ( )?Sugerowałbym bardzo prosty sposób:
Mam nadzieję, że to pomoże.
źródło
Jeśli maksymalna wartość występuje więcej niż raz i chcesz uzyskać wszystkie wskaźniki,
źródło
Może i tak potrzebujesz posortowanej listy?
Spróbuj tego:
źródło
sorted_list
nie ma indeksów, ale wartości, więc nie zadziała.przepraszam za ożywienie tego wątku, ale pomyślałem, że warto dodać moją metodę.
Nazwa listy w tym przykładzie „lista”
To spowoduje wydrukowanie największej wartości na liście, tak łatwo jak!
list.sort()
sortuje listę według wartości pozycji w tabeli ASCII , więc efektywnie sortuje listę od najniższej do najwyższej. Następnie po prostu drukuję ostatnią wartość na liście (która będzie największą liczbą) za pomocąprint(list[-1])
.Mam nadzieję że to pomoże!
źródło
Oto kompletne rozwiązanie twojego pytania przy użyciu wbudowanych funkcji Pythona:
źródło