2016-10-03 134 views
2

我有不同類型的數據(字符串,int等)的列表。我需要創建一個新的列表,例如只有int元素,另一個列表只包含字符串元素。怎麼做?按每個元素的類型過濾列表的元素

+0

使用'for'環和'isinstance(元素,INT)'等 – furas

+0

你可能想嘗試'過濾器的方法,或列表理解 –

回答

3

你可以用list comprehension做到這一點:

integers = [elm for elm in data if isinstance(elm, int)] 

哪裏data是數據。以上所做的是創建一個新列表,使用滿足if之後的條件的元素dataelm)填充它,該元素將檢查元素是否爲int的實例。您還可以使用filter

integers = list(filter(lambda elm: isinstance(elm, int), data)) 

以上會過濾掉根據傳遞的拉姆達,過濾掉所有非整數元素。然後您可以將其應用於字符串,使用isinstance(elm, str)來檢查字符串的實例。

+0

偉大的作品,謝謝! –

+0

@IlyaSpark沒問題,很樂意幫忙 – Li357

2

排序列表按類型,然後使用groupby到組它:

>>> import itertools 
>>> l = ['a', 1, 2, 'b', 'e', 9.2, 'l'] 
>>> l.sort(key=lambda x: str(type(x))) 
>>> lists = [list(v) for k,v in itertools.groupby(l, lambda x: str(type(x)))] 
>>> lists 
[[9.2], [1, 2], ['a', 'b', 'e', 'l']] 
+0

OP似乎想單獨列出沒有子列表,但很好的答案! – Li357

+0

@AndrewL。 - 他們仍然是分開的。他們只是沒有手工製作的標籤。然而,這可以用字典來完成,例如, 'list = {k:list(v)for k,v in itertools.groupby(l,lambda x:str(type(x))}}'。當然,好處是這些名稱是自動生成的,並且可以輕鬆組織。 – TigerhawkT3