J'ai une liste de valeurs, qui peut être une chaîne comme "chaîne" et peut être des nombres qui sont donnés dans un format de chaîne comme "2.3"

Je veux convertir des chaînes d'une certaine valeur en un nombre ("N / A" -> - 1) et laisser toute autre chaîne intacte, en plus j'ai besoin de convertir les nombres qui sont donnés dans une chaîne, au format flottant en chaîne format ("1.0" -> 1) etc.

J'ai réussi à le faire si je commence par parcourir toute la liste et convertis les valeurs N / A en -1 comme ça

for i in list:
    if i=="N/A": 
        i=-1

Puis exécutez avec

l = [int(i) for i in l]

Mais je pourrais encore avoir des chaînes, autres que "N / A" et je ne veux pas avoir de problème pour les convertir, et j'ai besoin d'utiliser try dans la deuxième boucle. Comment puis je faire ça?

C'est le code que j'essaye mais je me donne une erreur de syntaxe

l = [try: int(float(i)) except: pass] for i in l

Exemple de liste d'origine: ["1.0", "N / A", "lol"] j'ai besoin que ce soit [1, -1, "lol"]

1
thebeancounter 7 mars 2016 à 12:33

4 réponses

Meilleure réponse
def convert(value):
    if value == 'N/A':
        return -1
    try:
        return int(value)
    except ValueError:
        return value

Alors:

[convert(value) for value in values]
2
Peter Wood 7 mars 2016 à 09:39

Vous pouvez encapsuler l'instruction try-except dans votre propre fonction et l'utiliser dans la compréhension de la liste.

def try_int(s):
    try:
        return int(s)
    except ValueError:
        return s

l = [try_int(i) for i in l]
0
Łukasz Rogalski 7 mars 2016 à 09:40

Avec try except, essayez de caster en int si une exception se produit et si c'est "N/A", elle doit donc être remplacée par -1:

li = ["1.0" , "N/A" , "12" , "2.0", "Ok"]

for i,v in enumerate(li):
    try:
        li[i] = int(float((v)))
    except:
        if(li[i] == "N/A"):
            li[i] = -1

li # [1, -1, 12, 2, "Ok"]
3
ᴀʀᴍᴀɴ 7 mars 2016 à 09:46

Faites-le en une seule boucle.

l = ["N/A", "3", "5", "6"]

for idx,val in enumerate(l):
    try:
        l[idx] = int(val)
    except:
        l[idx] = -1

print l

Sortie

[-1, 3, 5, 6]
0
Kordi 7 mars 2016 à 09:48