Seite 1 von 1

Fehlende Zahlen in einer Liste suchen

Verfasst: Mittwoch 8. Juli 2020, 12:37
von 16_Bit
Hallo,

was ist eurer Meinung nach der cleverste Weg Lücken in einer Zahlenreihe zu finden?

Code: Alles auswählen

zahlenreihe = [305, 306, 308, 310, ... , 476]
Ich habe es jetzt so gelöst. mit min(zahlenreihe) und max(zahlenreihe) ermittle ich die kleinste und größte Zahl. Damit erstelle ich per range() eine Vergleichszahlenreihe und erstelle ein set() daraus. Aus zahlenreihe mache ich ebenfalls ein set().

Danach kann ich die Sets einfach vergleichen

Code: Alles auswählen

unterschiede = vergleichs_set.difference(zahlenreihe_set)
Statt mit einem set() zu arbeiten könnte man auch eine for - Schleife bauen, die die Vergleichszahlenreihe durchläuft. Bei jedem Durchlauf könnte dann geprüft werden, ob die aktuelle Zahl in zahlenreihe enthalten ist. Das dauert aber glaube ich länger als mit einem Set zu arbeiten.

Re: Fehlende Zahlen in einer Liste suchen

Verfasst: Mittwoch 8. Juli 2020, 13:15
von Sirius3
Sets sind doch in Ordnung. Damit erkennt man aber natürlich nicht, ob am Anfang oder Ende eine Zahl fehlt.

Re: Fehlende Zahlen in einer Liste suchen

Verfasst: Mittwoch 8. Juli 2020, 13:16
von __blackjack__
@16_Bit: Die Zahlen sind aber anders als im Beispiel nicht aufsteigend sortiert, oder? Denn wären sie dass, wäre `min()`/`max()` nicht sinnvoll, denn das wäre dann ja einfach das erste und letzte Element.

Im Fall das die Zahlen nicht sortiert sind, würde ich daraus ein `set()` machen und das in einer „list comprehension“ nutzen um mit `range()` alle durchzugehen und nur die zu behalten die nicht in dem `set()` sind.

Sollten sie sortiert sein, wäre ein lineares durchgehen um die Lücken zu finden zumindest von der Laufzeitkomplexität günstiger als die Differenz mit Mengen zu bilden.

Re: Fehlende Zahlen in einer Liste suchen

Verfasst: Mittwoch 8. Juli 2020, 13:47
von 16_Bit
__blackjack__ hat geschrieben: Mittwoch 8. Juli 2020, 13:16 @16_Bit: Die Zahlen sind aber anders als im Beispiel nicht aufsteigend sortiert, oder? Denn wären sie dass, wäre `min()`/`max()` nicht sinnvoll, denn das wäre dann ja einfach das erste und letzte Element.
Richtig, die Zahlen sind nicht geordnet.