2017-12-06 1 views
0
list_of_strings = ["a", "2", "7", "zebra"] 

def safe_int(list): 
    try: 
     list[i] = int(list[i]) 
    except ValueError: 
     list[i] = 0 

new_list = [safe_int(list_of_strings) for i in range(len(list_of_strings))] 

print new_list 

erwartetes Ergebnis in keiner Folge haben kann: [0, 2, 7, 0]

Ergebnis: [None, None, None, None]

+0

i definiert und initialisiert werden soll, bevor Sie hinzufügen 'i = 0 'nach der Listendefinition schreiben bevorzugen –

+0

Sie eine Liste bauen (' new_list') ansammelt, was zurückgegeben 'safe_int (...)' - nun frage dich selbst "Was liefert die Funktion' safe_int() '?" Wenn ich mich frage, antworte ich "nichts!" oder, in Python ausgedrückt, gibt es 'None' zurück. Daher Ihr Ergebnis ... - Haben Sie andererseits versucht, den Inhalt von 'list_of_strings' nach dem Listenverständnis zu drucken? – gboffi

+0

Vielen Dank gboffi, Du hast mir so sehr geholfen. Aber nur aus Neugier, wäre es möglich, die Ausgabe von safe_int() direkt einer anderen neuen Liste zuzuweisen –

Antwort

1

definieren sie Ihre Funktion, so dass es kehrt das Ergebnis der Umwandlung oder der Zahl Null

def safe_int(l, i): 
    try: 
     return int(l[i]) 
    except ValueError: 
     return 0 

(beachten sie, dass ich ausdrücklich i an die Funktion übergeben habe becau se der Wert von i in der Liste Verständnis in der Funktion aufgrund einer schlechten Design-Entscheidung in Python 2, das in Python 3) korrigiert wurde, und dann baut die new_list

new_list = [ safe_int(list_of_strings, i) for ...] 

Ich muß sagen, dass Ihr Ansatz sichtbar ist nicht idiomatischen, würde ich

def safe_int(a_string): 
    try: 
     return int(a_string) 
    except ValueError: 
     return 0 

new_list = [safe_int(s) for s in list_of_strings] 
Verwandte Themen