Wenn ich eine Liste von Ganzzahlen/Gleitkommazahlen gegeben wird, wie würde ich die beiden nächsten Zahlen mit Sortierung finden?Suchen der beiden nächsten Zahlen in einer Liste mit Sortierung
Antwort
Ein solches Verfahren wird tun, was Sie wollen:
>>> def minDistance(lst):
lst = sorted(lst)
index = -1
distance = max(lst) - min(lst)
for i in range(len(lst)-1):
if lst[i+1] - lst[i] < distance:
distance = lst[i+1] - lst[i]
index = i
for i in range(len(lst)-1):
if lst[i+1] - lst[i] == distance:
print lst[i],lst[i+1]
Im ersten for
Schleife wir den Mindestabstand zu erfahren, und in der zweiten Schleife, wir drucken alle Paare mit diesem Abstand. Funktioniert wie folgt:
>>> lst = (1,2,3,6,12,9,1.4,145,12,83,53,12,3.4,2,7.5)
>>> minDistance(lst)
2 2
12 12
12 12
>>>
Es könnte mehr als eine Möglichkeit sein. Betrachten Sie diese Liste
[0,1, 20, 25, 30, 200, 201]
[0,1] und [200, 201] sind gleich am nächsten.
Jose hat einen gültigen Punkt. Sie können diese Fälle jedoch als gleich betrachten und sich nicht darum kümmern, das eine oder das andere zurückzugeben.
Ich glaube nicht, dass Sie einen Sortieralgorithmus benötigen, pro sagen, aber vielleicht nur eine Art ‚Champion‘ Algorithmus wie diese:
def smallestDistance(self, arr):
championI = -1
championJ = -1
champDistance = sys.maxint
i = 0
while i < arr.length:
j = i + 1
while j < arr.length:
if math.fabs(arr[i] - arr[j]) < champDistance:
championI = i
championJ = j
champDistance = math.fabs(arr[i] - arr[j])
j += 1
i += 1
r = [arr[championI], arr[championJ]]
return r
Diese Funktion wird eine Sub-Array mit den beiden Werten zurückkehren das sind am nächsten zusammen. Beachten Sie, dass dies nur bei einem Array von mindestens zwei Long funktioniert. Andernfalls werden Sie einen Fehler werfen.
Ich denke, der beliebte Sortieralgorithmus wie Blasensortierung würde das recht gut tun. Obwohl es bei O(n^2)
Zeit möglich ist, wenn diese Art von Sache für Sie von Bedeutung ist ...
Hier ist Standard Blasensortieren basierend auf der Sortierung von Arrays durch ganzzahlige Größe.
def bubblesort(A):
for i in range(len(A)):
for k in range(len(A) - 1, i, -1):
if (A[k] < A[k - 1]):
swap(A, k, k - 1)
def swap(A, x, y):
tmp = A[x]
A[x] = A[y]
A[y] = tmp
Sie können den Algorithmus nur leicht an Ihre Zwecke anpassen, wenn Sie darauf bestehen, einen Sortieralgorithmus zu verwenden. Ich denke jedoch, die ursprüngliche Funktion funktioniert auch ...
hoffe, dass hilft.
würde der zweite Code mit nur der ersten Funktion auch funktionieren? Ich muss auch dasselbe tun, indem ich zwei verschachtelte for-Schleifen verwende. – PythonSOS
Es ist nur ein bisschen @PythonSOS zerlegt. Sie müssten die Loops ändern, wenn Sie auf einen Bubble-Sort-Ansatz bestehen. – modesitt
- 1. Die beiden nächsten Zahlen zu einem Float aus einer Liste herausfinden
- 2. Suchen in der Mitte einer Liste
- 3. Voraussagen der nächsten Zahlen in einer zufälligen. NET-Sequenz
- 4. Den Abstand zwischen den beiden nächsten Zahlen in einem Array von n Zahlen finden. (Vorsortierte Arrays)
- 5. Suchen der nächsten leeren Zelle in einer Spalte
- 6. Linq: Sortierung der Liste auf Basis einer anderen Liste
- 7. Sortierung Zahlen in einer Reihe auf der BASH/Shell
- 8. Sortierung Nächste Zahlen von Array mit
- 9. Bei einer Liste von Zahlen, die nächsten in der Folge vorhersagen
- 10. Sortierung einer ArrayList in Java mit Strings und ganzen Zahlen
- 11. Python Liste Sortierung, Wörterbücher innerhalb einer Liste
- 12. Python: Varianz einer Liste der definierten Zahlen
- 13. Guava Art der Sortierung Liste nach einer anderen Liste?
- 14. Sortierung aufsteigende und absteigende in einer Liste
- 15. Sortierung aus einer Liste von Daten, die in den nächsten 12 Stunden fällig werden
- 16. Liste Sortierung in C#
- 17. Sortierung nach höchstem Durchschnitt in einer Liste
- 18. Sortierung ohne Sortierung mit Sortierung (Liste, Schlüssel = Str.Loer)
- 19. Sortierung Dateipfade in einer Liste der benutzerdefinierten Objekte
- 20. Wie man von der Sortierung der Zahlen zur alphabetischen Sortierung in C++ geht
- 21. aus der Liste der ganzen Zahlen, die Zahl am nächsten zu einem gegebenen Wert
- 22. SQL Oracle Sortierung String (Zahlen) und (Buchstaben mit Zahlen)
- 23. Liste der verschachtelten Wörterbücher in Python Sortierung
- 24. Java - Optimieren Sie das Suchen einer Zeichenfolge in einer Liste
- 25. jquery in einer Liste nach Index suchen
- 26. Suchen der niedrigsten unbenutzten eindeutigen ID in einer Liste
- 27. Sortierung einer Liste mit Strukturpaar mit Std :: Sort
- 28. Sortierung Dropdown-Liste mit Javascript
- 29. Wartung der Bestellung in der Liste in der nächsten Iteration
- 30. Suchen fortlaufender Duplikate in einer Liste
Warum setzen Sie den Index auf -1? – PythonSOS
@PythonSOS Ich wollte nur die 'index' Variable für die nächste Verwendung definieren. Dieser Anfangswert wird nirgendwo verwendet. Sie können "-1" durch eine beliebige Zahl ersetzen. – EbraHim
auch, wird dies funktionieren, wenn es zwei Zahlen in einer Liste gibt, die genau die gleichen sind? Wenn ich [3,3,4] habe, sollte es [3,3] und nicht [3,4] zurückgeben. – PythonSOS