2009-08-14 147 views
7

简单的问题:有没有办法仅从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 ] 

是否有这样做的简单的方法,还是我不得不求助于检查每个列表项的变量类型,只输出数字?

+3

为什么这个问题是低调投票? – 2009-08-14 13:51:15

+0

补充一下,这是我希望我可以选择两个答案 – dassouki 2009-08-14 14:04:23

+0

,为什么现在这么高?这里有很多问题的重复! – SilentGhost 2009-08-14 14:06:28

回答

14

这应该是最高效能最短:

import operator 
filter(operator.isNumberType, list_1) 

编辑:这在Python 3000:

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

将无法​​在py3k – SilentGhost 2009-08-14 13:58:25

+0

我不使用py3k,但那么它将只是isinstance(x,numbers.Number)而不是operator.isNumberType) – dalloliogm 2009-08-14 14:01:05

+0

好的。我不太了解python 3k,所以我再次改变了这个例子。 – dalloliogm 2009-08-14 14:53:52

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

要测试各种类型: 过滤器(lambda n:isinstance(n,int)或isinstance(n,float),list_of_values) – 2009-08-14 13:47:06

+0

我的意思是数字一般,而不仅仅是整数 – dassouki 2009-08-14 13:47:25

12

列表理解。

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

工作得很好,谢谢:D – dassouki 2009-08-14 13:49:17

+0

它可能值得将long类型添加到你的元组中。 – 2009-08-14 13:51:39

+1

为了改善这一点,你可以使用operator.isNumberType来确定一个元素是否是一个数字(参见我的其他答案,用过滤器代替列表理解)。 – dalloliogm 2009-08-14 13:59:05

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

'isinstance'只有2个参数。 – SilentGhost 2009-08-14 13:49:24

+0

大概意思是:list_2 = [我为我在list_1如果isinstance(i,(int,float))] – hughdbrown 2009-08-14 14:05:54

2
list_2 = [i for i in list_1 if isinstance(i, (int, float))] 
-1
>>> [ i for i in list_1 if not str(i).replace(" ","").isalpha() ] 
[1, 123131.13099999999, 9.9999999999999995e-07, 34.124512352650001] 
+0

这将是**很**慢 – SilentGhost 2009-08-14 13:56:02

-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)] 
0

我认为最简单的方法是:

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

希望它能帮助!

0

只有列表中的数字已经转换为适当的类型(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将仅包含来自初始列表的所有整数。

相关问题