list = ['5', '12', '4', '3', '5', '14', '16', '-2', '4', 'test'] I've a list containing 10 items. How to convert this into a list of integers? I'm getting errors because of 'test' in the list.
8 Réponses :
list = ['5', '12', '4', '3', '5', '14', '16', '-2', '4', 'test'] new_list = [] for i in list: try: new_list.append(int(i)) except ValueError: print("String found")
supposant que vous souhaitiez oublier des valeurs erronées, qu'en est-il de exécution: p>
sauf: code> est rarement une bonne idée.
@jonrsharpe oui mais comme je le dis au début de ma réponse supposant que vous souhaitiez oublier des valeurs erronées code>, bien sûr si l'objectif est différent, la mise en œuvre doit être trop ^^
Droite, mais cela n'implique toujours pas l'utilisation de sauf: code>. Au minimum absolu
sauf exception: code>, mais le nom de l'erreur appropriée est juste dans ce que vous avez écrit.
@jonrsharpe à ce moment-là que je ne suis pas sûr de comprendre ce que vous voulez dire, voulez-vous indiquer que j'ai une exception à faire une exception sur append () code> (mais
int (_) code> est ok )?
Non, je veux dire que l'erreur appropriée est dans "oublier les mauvaises valeurs" i> - ValueError code>.
@jonrsharpe signifie juste que vous ne devez jamais utiliser un nu, sauf code> car il va attraper toutes les exceptions, en particulier celles qui sont inattendues. Ceci est considéré et anti-motif. Lorsque vous utilisez
sauf code>, il doit toujours inclure uniquement l'exception réelle que vous attrapez. Le plus diabolique Python antidiaphon
@TrentonMckinney Merci pour votre remarque. Je vais expliquer davantage: si je veux attraper int ('aze') code> i peut utiliser
sauf valideerror: ... code>, mais au cas où le "mauvais" élément n'est pas Une chaîne mais l'instance d'une classe, il est possible que cette classe définisse une méthode de conversion appelée par
int (the_instance) code>? Si oui, cette méthode peut produire une exception, y compris une baseeException, et pour l'attraper, j'ai besoin
sauf: code> ou
sauf BASEEXception: code>. Une mauvaise liste peut contenir tout ce qui est non seulement "test". Peut-être que ce que je dis est stupide, mais j'écris principalement en C ++ et en C ++, nous pouvons redéfinir les opérateurs, y compris la conversion.
Mais au cas où le «mauvais» élément n'est pas une chaîne, mais l'instance d'une classe, i> Il s'agit de ne pas avoir d'exceptions négatives. Dans le cas, vous décrivez, cette exception devrait être autorisée à se produire, car elle n'est pas prévue et signifie qu'il y a un problème différent. C'est probablement un état d'esprit bien différent par rapport à C ++.
@TrentonMckinney dans un cas «normal» Oui, car cela cache un bug, mais ma réponse commence par supposant oublier les valeurs erronées code> alors même ce cas doit être silencieusement caché.
str.isnumérique code> a > ne passera pas de signe négatif li>
- Utilisez
str.lstrip code> a> Pour supprimer le - code>, vérifier .isnumérique code> et convertir en int code> si c'est le cas. LI>
- Alternativement, utilisez
str.isdigit code>
à la place de .isnumérique code>. li>
- n'utilise pas de python Type intégré comme nom de variable (par exemple,
Liste code> ) li>
Gardez toutes les valeurs de la liste: H2> t = [['5', '12', '4', '3', '5', '14', '16', '-2', '4', 'test'] for _ in range(3)]
t = [[int(v) if v.lstrip('-').isnumeric() else v for v in x] for x in t]
print(t)
# output
[[5, 12, 4, 3, 5, 14, 16, -2, 4, 'test'],
[5, 12, 4, 3, 5, 14, 16, -2, 4, 'test'],
[5, 12, 4, 3, 5, 14, 16, -2, 4, 'test']]
Utiliser int () code> Pour convertir les chaînes et utiliser
.isnumérique () code> pour vous assurer que la chaîne représente un numéro.
str_arr = ['5', '12', '4', '3', '5', '14', '16', '-2', '4', 'test']
int_arr = []
for s in str_arr:
if s.strip('-').isnumeric():
int_arr.append(int(s))
print(int_arr)
N'appelez pas une liste littéralement En supposant que vous voulez juste ignorer les valeurs non numériques, vous pouvez le faire dans une compréhension à l'aide d'un filtre à l'aide d'un filtre à l'aide d'un filtre fin: p> Liste code>. (Ombre ombrons la liste code> intégrée CODE> et peut vous donner des bugs étranges plus tard!)
Utilisez le code suivant:
[5, 12, 4, 3, 5, 14, 16, -2, 4]
Je suppose que la sortie est pas b> ce que l'OP attend, '- 2'.isdigit () code> est
false code>.
Bien que ce code puisse répondre à la question, fournissant un contexte supplémentaire sur la manière et / ou pourquoi il résout le problème améliorerait la valeur à long terme de la réponse.
Hey je mettez à jour mon code
Vous avez une erreur car les alphabets ne peuvent pas être convertis en entiers. Cependant, les entiers peuvent être convertis en chaînes.
Vous pouvez vous résoudre en utilisant "Essayer" et "sauf ' p>
Je vais vous donner comment il peut être fait P>
if (no_error): #try statement do_these_things elif (any_error): #except statement do_these_instead
Veuillez essayer le code suivant:
list = ['5', '12', '4', '3', '5', '14', '16', '-2', '4', 'test'] list1=[] for i in list: if(i.isnumeric()==True): list1.append(i) else: continue print(list1)
Que doit-on faire pour "test"? contourne ?
Obtenir des erreurs avec quoi? Donnez un exemple de reproductible minimal . Êtes-vous filtrage i> les valeurs non numériques?
Ceci est un duplicata de Comment convertir la liste des chaînes intégrées vers