2016-10-03 84 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

相关问题