Przed oferując moje rozwiązanie pozwól mi wypowiedzieć dotychczasowe dwa rozwiązania. Pozwala wywołać rozwiązanie Joey'a Roberta magicFunction1 i rozwiązanie Eric magicFunction2.
magicFunction1 jest bardzo krótki i elegancki. To, co mi się nie podoba, to to, że jeśli mam bardzo dużą listę liczb, a pierwsza jest już większa niż 10, wciąż będzie wykonywać całą pracę, aby znaleźć największą liczbę, która nie jest potrzebna. Odnosi się to również do magicFunction2
opracowałem dwa następujące rozwiązania:
magicFunction3[lst_, val_] :=
Position[# < val & /@ lst, False, 1, 1] == {}
i
magicFunction4[lst_, val_] :=
Cases[lst, x_ /; x >= val, 1, 1] == {}
Doing odniesienia znalazłem
In[1]:= data = Table[RandomInteger[{1, 10}], {10000000}];
In[2]:= Timing[magicFunction1[data, 10]]
Out[2]= {0.017551, False}
In[2]:= Timing[magicFunction2[data, 10]]
Out[2]= {10.0173, False}
In[2]:= Timing[magicFunction3[data, 10]]
Out[2]= {7.10192, False}
In[2]:= Timing[magicFunction4[data, 10]]
Out[2]= {0.402562, False}
Więc moja najlepsza odpowiedź jest magicFunction4, ale nadal nie wiem, dlaczego jest wolniejszy niż magicFunction1. Ignoruję również, dlaczego istnieje tak duża różnica w wydajności między magicFunction3 i magicFunction4.
Dzięki, dobry pomysł. – Nope
Wystarczy, że przeliterujemy: 'magicFunction [lst_, val_]: = Max [lst]
dreeves