J'essaie d'éliminer le str d'une liste que l'utilisateur donne, par exemple [1, a, 3, k, k, 9, p] Je dois conserver la liste mais nettoyer ensuite le str pour avoir une liste de seulement int. Je n'ai pas quelque chose comme le code ci-dessous, mais j'ai découvert que toute la liste est str Merci

if isinstance(x,int):
        print ('test')
        final_list.append(evaluation_list(x))
        print (mean(final_list))
-2
Mauricio Medina 5 nov. 2020 à 14:00

2 réponses

Meilleure réponse

Je suppose que l'utilisateur n'a entré que des chaînes et que vous souhaitez convertir ces chaînes en nombres entiers, tout en filtrant les chaînes qui ne peuvent pas être converties en nombres entiers.

La conversion d'une chaîne en type int peut être réalisée en appelant int( ) sur la chaîne. Si la conversion échoue, l'exception ValueError sera déclenchée. Vous pouvez intercepter cette exception dans un bloc try / except.

def map_to_int_or_discard(string_list):
  integer_list = []
  for x in string_list:
    try:
      integer_list.append(int(x))
    except ValueError:
      pass
  return integer_list

En revanche, si votre liste contient réellement des valeurs de type int et des valeurs de type string, vous pouvez filtrer les chaînes en utilisant isinstance( , int):

def keep_the_int(mixed_list):
  return [x for x in mixed_list if isinstance(x, int)]
0
Stef 5 nov. 2020 à 14:01

Je ne sais pas ce que votre tentative de solution est censée être, mais si vous avez une liste li, vous ne pouvez filtrer que les entiers en tant que tels:

import numbers

int_li = [n for n in li if isinstance(n, numbers.Integral)]
0
orlp 5 nov. 2020 à 11:04