有没有办法只从python列表输出数字?

时间:2009-08-14 13:42:48

标签: python

简单问题:

list_1 = [ 'asdada', 1, 123131.131, 'blaa adaraerada', 0.000001, 34.12451235265, 'stackoverflow is awesome' ]

我想创建一个list_2,使其只包含数字:

list_2 = [ 1, 123131.131, 0.000001, 34.12451235265 ]

是否有简单的方法,或者我是否必须检查每个列表项的变量类型并仅输出数字项?

10 个答案:

答案 0 :(得分:15)

列出理解。

list_2 = [num for num in list_1 if isinstance(num, (int,float))]

答案 1 :(得分:15)

这应该是最有效和最短的:

import operator
filter(operator.isNumberType, list_1)

编辑:这在python 3000中:

import numbers
[x for x in list_1 if isinstance(x, numbers.Number)]

答案 2 :(得分:2)

list_2 = [i for i in list_1 if isinstance(i, (int, float))]

答案 3 :(得分:1)

建议的所有解决方案仅在列表中的数字已转换为适当的类型(intfloat)时才有效。

我发现自己的列表来自fetchall的{​​{1}}函数。那里的所有元素都被格式化为sqlite3,即使其中一些元素实际上是整数。

str

问题的等价物将是:

cur.execute('SELECT column1 FROM table1 WHERE column2 = ?', (some_condition, ))
list_of_tuples = cur.fetchall()

对于这种情况,为了获得仅包含整数的列表,这是我找到的替代方案:

list_1 = [ 'asdada', '1', '123131', 'blaa adaraerada', '0', '34', 'stackoverflow is awesome' ]

list_of_numbers 将仅包含初始列表中的所有整数。

答案 4 :(得分:0)

filter(lambda n: isinstance(n, int), [1,2,"three"])

答案 5 :(得分:0)

list_2 = [i for i in list_1 if isinstance(i, (int, float))]

答案 6 :(得分:0)

我认为最简单的方法是:

[s for s in myList if s.isdigit()]

希望它有所帮助!

答案 7 :(得分:0)

list_1 = [ 'asdada', 1, 123131.131, 'blaa adaraerada', 0.000001, 34.12451235265, 'stackoverflow is awesome' ]

第一个示例:

list_2 = [x for x in list_1 if type(x) == int or type(x) == float ]
print(list_2)

第二个示例:

list_2 = [x for x in list_1 if isinstance(x, (int, float)) ]
print(list_2)

答案 8 :(得分:-1)

>>> [ i for i in list_1 if not str(i).replace(" ","").isalpha() ]
[1, 123131.13099999999, 9.9999999999999995e-07, 34.124512352650001]

答案 9 :(得分:-1)

缺少SilentGhost方式

list_2 = [i for i in list_1 if isinstance(i, (int, float))] 

list_2 = [i for i in list_1 if not isinstance(i, str)]