简单问题:
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 ]
是否有简单的方法来完成这件事,或者我必须检查每个列表项的变量类型并仅输出数值型的项目?
简单问题:
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 ]
是否有简单的方法来完成这件事,或者我必须检查每个列表项的变量类型并仅输出数值型的项目?
list_2 = [num for num in list_1 if isinstance(num, (int,float))]
这应该是Python 2中最高效和最短的代码:
import operator
filter(operator.isNumberType, list_1)
在Python 3中:
import numbers
[x for x in list_1 if isinstance(x, numbers.Number)]
list_2 = [i for i in list_1 if isinstance(i, (int, float))]
int
,float
)。sqlite3
的fetchall
函数的列表。 那里的所有元素都被格式化为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 = []
for tup in list_of_tuples:
try:
list_of_numbers.append(int(tup[0]))
except ValueError:
pass
list_of_numbers 将仅包含初始列表中的所有整数。
[s for s in myList if s.isdigit()]
filter(lambda n: isinstance(n, int), [1,2,"three"])
list_2 = [i for i in list_1 if isinstance(i, (int, float))]
isinstance
只接受 2 个参数。 - SilentGhost>>> [ i for i in list_1 if not str(i).replace(" ","").isalpha() ]
[1, 123131.13099999999, 9.9999999999999995e-07, 34.124512352650001]
简称为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)]
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)