简单问题:
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 ]
是否有简单的方法,或者我是否必须检查每个列表项的变量类型并仅输出数字项?
答案 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)
建议的所有解决方案仅在列表中的数字已转换为适当的类型(int
,float
)时才有效。
我发现自己的列表来自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)]