Seite 1 von 1

Listeneinträge durchsuchen und Datentyp für alle Einträge

Verfasst: Mittwoch 11. Januar 2006, 12:00
von pascalsv
Moinsen,

ich würde gerne eine Funktion schreiben, mit der eine beliebige eindimensionale Liste gefüttert wird und die als Rückgabewert angibt, ob sich alle Einträge der Liste in eint integer umwandeln lassen würden.

Bsp:
Liste1 = ['0001', '04711', '0451'] -> Diese Listeneinträge könnten alle in Integer umgewandelt werden.

Liste2 = ['0001', '04711', '1AAFFEE'] -> geht nicht.

Aber wie macht man dies am schnellsten und effizientesten?

Danke & Gruß,

Pascal

Verfasst: Mittwoch 11. Januar 2006, 12:19
von jens

Code: Alles auswählen

def check_list(list):
    for i in list:
        try:
            int(i)
        except:
            return False
    return True


Liste1 = ['0001', '04711', '0451']
Liste2 = ['0001', '04711', '1AAFFEE']

print check_list(Liste1)
print check_list(Liste2)

Verfasst: Mittwoch 11. Januar 2006, 12:45
von pascalsv
Jawoll ja! Schöner als meine Lösung.

Danke!!
Pascal

Verfasst: Mittwoch 11. Januar 2006, 14:00
von helmut
Diese Loesung liefert die Anzahl der Werte, die nicht in einen Integerwert gewandelt werden koennen (0 => True, alles andere False):

Code: Alles auswählen

def test(a):
    if a==int(a): return 0
    return 1

def check_list(liste):
    return sum(map(test,liste))

li=[1,2,3,4,5.5,6.6]
print check_list(li)
Gruss, Helmut

Verfasst: Mittwoch 11. Januar 2006, 14:17
von mawe
helmut hat geschrieben: Diese Loesung liefert die Anzahl der Werte, die nicht in einen Integerwert gewandelt werden koennen
Nö, diese Lösung liefert eine Fehlermeldung ;)

Verfasst: Mittwoch 11. Januar 2006, 14:49
von helmut
@ mawe,

hast recht; daran gibt's leider nichts zu deuteln.

Gruss, Helmut

Verfasst: Mittwoch 11. Januar 2006, 17:32
von Gast
Hallo!

Du koenntest auch mit hasattr(value,'__int__') schauen, ob das entsprechende Datum eine Routine besitzt, die eine Konvertierung in einen int zulassen.

Gruss Tom

Verfasst: Mittwoch 11. Januar 2006, 18:27
von Joghurt
jens hat geschrieben:

Code: Alles auswählen

def check_list(list):
    for i in list:
        try:
            int(i)
        except:
            return False
    return True
Ich persönlich fände folgende Lösung besser:

Code: Alles auswählen

def list_to_int(list):
  try:
    return map(int,list)
  except ValueError:
    return None
Dann könntest du mit list_to_int(list) == None prüfen, ob es nicht geht oder hättest auch gleich die konvertierte Liste; denn meistens will man etwas ja auch machen, wenn man weiss, dass es geht.

Die Pythonphilosophie ist es, anstatt versuchen zu erraten, ob es geht, es einfach direkt zu versuchen und auf entsprechende Fehler zu reagieren. (anstatt versuchen sie zu vermeiden)

Verfasst: Mittwoch 11. Januar 2006, 22:39
von BlackJack
"Pythonphilosophisch" ist die Rückgabe von `None` als spezieller Fehlerwert aber auch nicht so gerne gesehen. Dafür sind ja Ausnahmen da. Das heisst es würde auf ein einfaches ``map(int, whatever)`` hinauslaufen.

Verfasst: Mittwoch 11. Januar 2006, 23:06
von Joghurt
Stimmt natürlich, aber er wollte ja unbedingt eine Funktion, die das testet.

Verfasst: Donnerstag 12. Januar 2006, 08:13
von jens
Wobei ich mein True/False garnicht so schlecht finde... Dann kann man einfach mit if nachschauen... Ob es Sinn macht wirklich die konvertierte Zahlenliste zurück zu liefern, weiß ich nicht, kommt auf den Anwendungsfall an...