python: extraer enteros de la lista mixta

(Python 2.7.8)

Estoy tratando de hacer una función para extraer enteros de una lista mixta. La lista mixta puede ser cualquier cosa, pero, por ejemplo, voy con:

testList = [1, 4.66, 7, "abc", 5, True, 3.2, False, "Hello", 7] 

Pensé que esto sería simple, y acabo de escribir:

 def parseIntegers(mixedList): newList = [i for i in mixedList if isinstance(i, int)] return newList 

El problema es que la nueva lista que crea tiene valores booleanos y enteros, lo que significa que me da:

 [1, 7, 5, True, False, 7] 

¿Porqué es eso? También utilicé para loop (para i en mixedList: if isinstace …..), pero es esencialmente el mismo (?) Y tiene el mismo problema.

El mejor enfoque es no usar el type , sino usar una cadena de llamadas de isinstance . La desventaja de usar el type es que alguien podría int subclase de int en el futuro, y luego su código no funcionará. Además, dado que está utilizando Python 2.x, debe considerar números mayores o iguales a 2 ^ 31: estos no son caracteres. Necesitas considerar el tipo long :

 def parseIntegers(mixedList): return [x for x in testList if (isinstance(x, int) or isinstance(x, long)) and not isinstance(x, bool)] 

Razón por la que necesita considerar long :

 >>> a = 2 ** 31 >>> isinstance(a, int) False 

Al parecer bool es una subclase de int:

 Python 2.7.3 (default, Feb 27 2014, 19:58:35) [GCC 4.6.3] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> isinstance(42, int) True >>> isinstance(True, int) True >>> isinstance('42', int) False >>> isinstance(42, bool) False >>> 

En lugar de isinstance(i, int) , puede usar type(i) is int o isinstance(i, int) and not isinstance(i, bool) .

tal como lo explica @pts para isinstance, así que use un type como este

 [ x for x in testList if type(x)==int ] 

salida:

 [1, 7, 5, 7] 

utilizar el set para eliminar la duplicación

 testList = [1, 4.66, 7, "abc", 5, True, 3.2, False, "Hello", 7] print([x for x in testList if isinstance(x,int) and not isinstance(x,bool)]) [1, 7, 5, 7]