Hallo zusammen,
liste = [1, 2, 3, 5]
Nach dem Kriterium der aufsteigenden Reihenfolge fehlt die Zahl 4.
Wie kann ich diese ermitteln?
LG
rolgal_reloaded
Finden in liste...
Hier mal eine kleine Lösung meinerseits
LG
Code: Alles auswählen
#!/usr/bin/env python
#-*-encoding: utf-8 -*-
liste = [1, 2, 3, 5]
print liste
for i in range(max(liste)):
if i in liste:
print i,'ist in der Liste'
else:
liste.append(i)
print i,'war nicht in der Liste, wurde aber eingefügt'
print sorted(liste)
Zuletzt geändert von CrackPod am Donnerstag 26. April 2007, 21:57, insgesamt 1-mal geändert.
- gerold
- Python-Forum Veteran
- Beiträge: 5555
- Registriert: Samstag 28. Februar 2004, 22:04
- Wohnort: Oberhofen im Inntal (Tirol)
- Kontaktdaten:
Hallo rolgal_reloaded!rolgal_reloaded hat geschrieben:Nach dem Kriterium der aufsteigenden Reihenfolge fehlt die Zahl 4. Wie kann ich diese ermitteln?
Da bis jetzt noch keiner geantwortet hat: Mit einer Referenzliste.
Code: Alles auswählen
>>> liste = [1, 2, 3, 5]
>>> for index, item in enumerate(range(1, len(liste) + 1)):
... if liste[index] <> item:
... print "Erstes fehlendes Element: %i" % i
...
Erstes fehlendes Element: 4
>>>
mfg
Gerold
Edit: 4 min. zu spät
Edit: Ich hatte den falschen Code ins Forum kopiert. Das hier ist jetzt der richtige.
Code: Alles auswählen
>>> liste = [1, 2, 3, 5]
>>> for index, item in enumerate(range(1, len(liste) + 1)):
... if liste[index] <> item:
... print "Erstes fehlendes Element: %i" % item
... break
...
Erstes fehlendes Element: 4
>>>
Zuletzt geändert von gerold am Freitag 27. April 2007, 07:56, insgesamt 1-mal geändert.
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Ich hätte noch das hier zu bieten:
Code: Alles auswählen
from itertools import count, ifilter, izip
from operator import itemgetter
def main():
liste = [1, 2, 3, 5]
print ifilter(itemgetter(1),
((a, a - b) for a, b in izip(count(1), liste))).next()[0]
-
- User
- Beiträge: 312
- Registriert: Dienstag 24. Oktober 2006, 19:31
@all:
vielen Dank für die Beispiele, ich bin grad mal dabei alle für den entsprechenden Kontext zu probieren.
Liebe Grüße
rolgal_reloaded
vielen Dank für die Beispiele, ich bin grad mal dabei alle für den entsprechenden Kontext zu probieren.
Liebe Grüße
rolgal_reloaded
-
- User
- Beiträge: 312
- Registriert: Dienstag 24. Oktober 2006, 19:31
Ich glaube da funzt was nicht. i muss wohl item heissen, oder?gerold hat geschrieben:Hallo rolgal_reloaded!rolgal_reloaded hat geschrieben:Nach dem Kriterium der aufsteigenden Reihenfolge fehlt die Zahl 4. Wie kann ich diese ermitteln?
Da bis jetzt noch keiner geantwortet hat: Mit einer Referenzliste.
Allerdings glaube ich nicht, dass dir damit geholfen ist. Oder doch?Code: Alles auswählen
>>> liste = [1, 2, 3, 5] >>> for index, item in enumerate(range(1, len(liste) + 1)): ... if liste[index] <> item: ... print "Erstes fehlendes Element: %i" % i ... Erstes fehlendes Element: 4 >>>
mfg
Gerold
Edit: 4 min. zu spät
Ausserhalb der Zeichenkette, meine ich.
Beim Testen mit dieser Liste
[1, 2, 4, 5] bekam ich dieses Ergebnis:
Fehlendes Element: 3
Fehlendes Element: 4
4 fehlt aber nicht.
Irgendwas check ich da jetzt nicht.
LG
rolgal_reloaded
-
- User
- Beiträge: 312
- Registriert: Dienstag 24. Oktober 2006, 19:31
Das könnte gut funktionieren für meine Zwecke, allerdings muss die Schleife für diese (Zwecke) so lauten - glaube ich:-)) :CrackPod hat geschrieben:Hier mal eine kleine Lösung meinerseits
LGCode: Alles auswählen
#!/usr/bin/env python #-*-encoding: utf-8 -*- liste = [1, 2, 3, 5] print liste for i in range(max(liste)): if i in liste: print i,'ist in der Liste' else: liste.append(i) print i,'war nicht in der Liste, wurde aber eingefügt' print sorted(liste)
Code: Alles auswählen
for i in range(1, max(liste)):
....
-
- User
- Beiträge: 312
- Registriert: Dienstag 24. Oktober 2006, 19:31
Hey BlackJack,BlackJack hat geschrieben:Ich hätte noch das hier zu bieten:
Code: Alles auswählen
from itertools import count, ifilter, izip from operator import itemgetter def main(): liste = [1, 2, 3, 5] print ifilter(itemgetter(1), ((a, a - b) for a, b in izip(count(1), liste))).next()[0]
habe dich schon länger nicht mehr gesehen. Jetzt weiss ich warum!
Du wart auf einer Zeitreise und hast uns ein schönes Stück Code aus der Zukunft mitgebracht.
Irgendwie liest es sich so:-)) Megaspacig!
Wird deine Zeitmaschine eigentlich mit Python gesteuert
Liebe Grüße
rolgal_reloaded
- gerold
- Python-Forum Veteran
- Beiträge: 5555
- Registriert: Samstag 28. Februar 2004, 22:04
- Wohnort: Oberhofen im Inntal (Tirol)
- Kontaktdaten:
Hi BlackJack!BlackJack hat geschrieben:Code: Alles auswählen
from itertools import count, ifilter, izip from operator import itemgetter def main(): liste = [1, 2, 3, 5] print ifilter(itemgetter(1), ((a, a - b) for a, b in izip(count(1), liste))).next()[0]
Da explodiert einem ja das Hirn, wenn man diesen Code liest. Ein Logikrätsel aus dem PM-Magazin ist leichter.
lg
Gerold
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
- gerold
- Python-Forum Veteran
- Beiträge: 5555
- Registriert: Samstag 28. Februar 2004, 22:04
- Wohnort: Oberhofen im Inntal (Tirol)
- Kontaktdaten:
Wenn es nicht um die Reihenfolge geht, sondern nur darum, welche Zahlen in der Reihe fehlen, dann habe ich hier noch einen:
mfg
Gerold
Code: Alles auswählen
>>> liste = [1, 2, 3, 5, 7]
>>> set1 = frozenset(liste)
>>> set2 = frozenset(xrange(1, max(liste) + 1))
>>> print set2.difference(set1)
frozenset([4, 6])
>>>
Gerold
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Okay, jetzt eine Lösung, die eine lineare Laufzeit hat, also nicht alle in Frage kommenden Zahlen mit ``in`` auf "enthalten sein" in der `liste` testet, die `liste` auch nur einmal durchläuft (kein `max()`) und auch keine Datenstruktur erzeugt, die alle in Frage kommenden Zahlen enthält:
Code: Alles auswählen
from itertools import count
def find_missing(iterable, expected_start=1):
result = list()
missing = 0
for expected, number in izip(count(expected_start), iterable):
diff = number - expected
if diff != missing:
result.extend(xrange(expected + missing, expected + diff))
missing = diff
return result
def main():
liste = [2, 3, 5, 8, 9, 11]
print find_missing(liste) # -> [1, 4, 6, 7, 10]
- gerold
- Python-Forum Veteran
- Beiträge: 5555
- Registriert: Samstag 28. Februar 2004, 22:04
- Wohnort: Oberhofen im Inntal (Tirol)
- Kontaktdaten:
Das ist ein schönes Spiel für Programmierer.
Ist euch schon mal in den Sinn gekommen, was andere "normale" Menschen über uns denken, wenn wir solche Dinge diskutieren?
lg
Gerold
Edit: An die Struktur von BlackJack angepasst
Ist euch schon mal in den Sinn gekommen, was andere "normale" Menschen über uns denken, wenn wir solche Dinge diskutieren?
Code: Alles auswählen
def find_missing(iterable, expected_start=1):
diff = []
expected = expected_start - 1
for item in iterable:
expected += 1
if item == expected:
continue
for diff_item in xrange(expected, item):
diff.append(diff_item)
expected += 1
return diff
liste = [2, 5, 10]
print find_missing(liste) # -> [1, 3, 4, 6, 7, 8, 9]
Gerold
Edit: An die Struktur von BlackJack angepasst
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Was meinst Du mit "normale" Menschen? Ich dachte *wir* sind normal und die anderen sind alle ein bisschen komisch!?