2009-08-14 98 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將僅包含來自初始列表的所有整數。

相關問題