Seite 1 von 1

Verfasst: Dienstag 9. September 2008, 20:38
von HWK
Hier eine ganz primitive Variante, aber vom Laufzeitverhalten vielleicht noch schneller:

Code: Alles auswählen

def f(lists, lim):
    ind = val = None
    for i, list_ in enumerate(lists):
        for item in list_:
            if item >= lim and (val is None or item < val):
                ind, val = i, item
    return (ind, val)

print f([[1, 2], [3, 4], [5, 6, 10], [7, 8]], 9)
MfG
HWK

Verfasst: Mittwoch 10. September 2008, 21:28
von Daniel_SGe
Hi, ich arbeite mich zur zeit durch den letzten vorschlag von blackjack... Falls es eventuell anders benötigt wird, schau ich mir auch deinen Vorschlag an HWK:) ... Laufzeitverhalten ist aber nicht unbedingt höchste Priorität... Is nur mittlere Spielerei;)

Vorschlag von BlackJack scheint endlich zu funktionieren, oder ich hab eben den Fehler noch nciht gefunden^^


Was ich aber immer noch nciht ganz verstehe ist diese Ausnahme mit dem Valueerror. Bzw. ich weiß schon, was es bewirken soll, nur nicht wie ich es weiterverarbeite;)
der letzte teil dummy, i =min(...) gibt mir nämlich schließlich wegen eines leeren arguments eine Fehlermeldung aus.... (ich hab den ganzen vorgang in eine while-Schleife eingebunden). Ich hätte aber gerne, dass die while-Schleife im Prinzip bei einem solchen "ValueError" abbricht, bzw. dass min(...) einen bestimmten Wert annimmt, den ich weiterverarbeiten könnte;)

Verfasst: Donnerstag 11. September 2008, 16:56
von HWK
Deshalb vielleicht doch die nicht so funktionale Variante. Dort ist das einfacher zu regeln und dürfte auch verständlicher sein. Schau dir's mal an.
MfG
HWK

Verfasst: Freitag 12. September 2008, 19:23
von Daniel_SGe
Hi!

Hab jetzt noch ein bischen an dem vorherigen Vorschlag von BlackJack rumprobiert... Scheint jetzt zu funktionieren...

Was mri jetzt noch fehlt ist ein kleine Funktion, mit der ich eine Datei mit verschiedenen Argumenten (manchmal auch mehrere pro Zeile) in Tupel umwandeln kann... (soll cih dafür einen neuen Thread aufmachen?) ... Bis jetzt sieht das bei mir so aus:

Code: Alles auswählen

datei = raw_input('''Falls gewünscht: Pfad der Versuchsliste...
''')
daten = open(datei, "r") 
dateien = splitfields(daten)
Es scheitert im Moment allerdings daran, dass mir splitfields mit NameError: name 'splitfields' is not defined
quittiert wird.

Was ich erreichen möchte: Jede Zeile wird in ein Tupel umgewandelt in denen jedes "Wort" einer Zeile jeweils als Element des Tupels umgewandelt wird.

Beispiel:

Code: Alles auswählen

a b c
d e
wird zu:

Code: Alles auswählen

((a, b, c), (d, e))

Verfasst: Freitag 12. September 2008, 19:43
von BlackJack
Neuer Thread für ein neues Problem wäre nicht schlecht.

Müssen es unbedingt Tupel sein?

Code: Alles auswählen

In [431]: f = open('test.txt')

In [432]: [line.split() for line in f]
Out[432]: [['a', 'b', 'c'], ['d', 'e']]

In [433]: f.close()
Hier kommen wir aber so langsam bei ziemlich grundlegenden Operationen an.