0
votes

Comment convertir une liste de cordes en entiers en python?

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.

3 commentaires

Que doit-on faire pour "test"? contourne ?


Obtenir des erreurs avec quoi? Donnez un exemple de reproductible minimal . Êtes-vous filtrage les valeurs non numériques?


Ceci est un duplicata de Comment convertir la liste des chaînes intégrées vers


8 Réponses :


1
votes
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")

0 commentaires

1
votes

supposant que vous souhaitiez oublier des valeurs erronées, qu'en est-il de xxx

exécution: xxx


9 commentaires

sauf: 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 , 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: . Au minimum absolu sauf exception: , 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 () (mais int (_) est ok )?


Non, je veux dire que l'erreur appropriée est dans "oublier les mauvaises valeurs" - ValueError .


@jonrsharpe signifie juste que vous ne devez jamais utiliser un nu, sauf car il va attraper toutes les exceptions, en particulier celles qui sont inattendues. Ceci est considéré et anti-motif. Lorsque vous utilisez sauf , 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') i peut utiliser sauf valideerror: ... , 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) ? Si oui, cette méthode peut produire une exception, y compris une baseeException, et pour l'attraper, j'ai besoin sauf: ou sauf BASEEXception: . 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, 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 alors même ce cas doit être silencieusement caché.




1
votes

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)


0 commentaires

2
votes

N'appelez pas une liste littéralement Liste . (Ombre ombrons la liste intégrée et peut vous donner des bugs étranges plus tard!)

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: xxx


0 commentaires

0
votes

Utilisez le code suivant:

[5, 12, 4, 3, 5, 14, 16, -2, 4]


3 commentaires

Je suppose que la sortie est pas ce que l'OP attend, '- 2'.isdigit () est false .


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



0
votes

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


0 commentaires

0
votes

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)


0 commentaires