[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]