3
votes

liste de retour avec des entiers et une chaîne de la liste des chaînes

[10019, 'Airma25KLOS', 'Juridinis', 'LT', 121979631, 'LZ219796314', 2410, 25, 26, 3232, 32131]

0 commentaires

5 Réponses :


7
votes

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]


7 commentaires

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



8
votes

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]


1 commentaires

Oui, c'est ce à quoi je pensais. +1



3
votes

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


2 commentaires

behtreen hogaya! :)


shukriya :) @DirtyBit



2
votes

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>


0 commentaires

3
votes

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]


0 commentaires