[10019, 'Airma25KLOS', 'Juridinis', 'LT', 121979631, 'LZ219796314', 2410, 25, 26, 3232, 32131]
5 Réponses :
Vous pouvez utiliser la compréhension de liste suivante avec .isdigit pour convertir en int uniquement des chaînes numériques:
l = ['10019', 'Airma25KLOS', 'Juridinis', 'LT', '121979631',
'LT219796314', '2410', '25', '26', '3232', '32131']
[int(i) if i.lstrip('-').isdigit() else i for i in l]
# [10019, 'Airma25KLOS', 'Juridinis', 'LT', 121979631, 'LT219796314',
# 2410, 25, 26, 3232, 32131]
Pas tout à fait robuste. Et si l'un des nombres entiers est négatif?
@JohnColeman a raison. À mon avis, une méthode plus rigoureuse consisterait à définir une fonction distincte pour vérifier plus précisément si une chaîne est un entier ou non.
@JohnColeman bon point. Ajoutera une mise à jour envisageant également les ints négatifs
@yatu Cela dépend de l'application prévue. Pour les littéraux entiers positifs en base 10 (que OP semble avoir à l'esprit), c'est très bien. OP devrait certainement connaître isdigit () , mais aussi connaître ses limites.
Ajout d'un .lstrip ('-') pour gérer également les chiffres négatifs
Et si vous avez un entier positif '+1' ou un nombre décimal '1.0' ?
Cette approche ne fonctionne que pour les entiers, ainsi que pour l'autre solution proposée. Pour un signe +, vous pouvez simplement supprimer à la fois - et +, i.lstrip ('+ -') @MykolaZotko
Celui-ci devrait fonctionner pour toute chaîne qui est une représentation valide d'un entier (qu'il soit positif ou négatif). Pas que si cela ne fonctionnera pas avec les flottants.
def to_int(s):
try:
return int(s)
except (TypeError, ValueError) as e:
return s
result = [to_int(s) for s in your_list]
Oui, c'est ce à quoi je pensais. +1
Utilisez ce code. Cela fonctionne bien en cas d'entiers négatifs ainsi que de nombres flottants, etc.
Code:
[10019, 'Airma25KLOS', 'Juridinis', 'LT', 121979631, 'LT219796314', 2410, -25, 26, 3232, 32131]
Sortie:
def is_number(s):
try:
float(s)
return True
except ValueError:
pass
try:
import unicodedata
unicodedata.numeric(s)
return True
except (TypeError, ValueError):
pass
return False
l = ['10019', 'Airma25KLOS', 'Juridinis', 'LT', '121979631',
'LT219796314', '2410', '-25', '26', '3232', '32131']
print([int(i) if is_number(i) else i for i in l])
behtreen hogaya! :)
shukriya :) @DirtyBit
Vous pouvez essayer ceci:
l=['-10019', 'Airma25KLOS', 'Juridinis', 'LT', '121979631', 'LT219796314', '2410', '25', '26', '3232', '32131']
a=[]
for item in l:
try:
a.append(int(item))
except:
a.append(item)
Je ne sais pas si c'est la meilleure méthode pour cela, mais cela fonctionne pour tous les entiers (positifs et négatifs)
p>
Vous pouvez utiliser regex pour vérifier si une chaîne est un entier:
import re p = re.compile(r'[+-]?\d+') [int(i) if p.fullmatch(i) else i for i in l]