【发布时间】:2016-10-03 04:38:15
【问题描述】:
我有一个包含不同类型数据(字符串、整数等)的列表。例如,我需要创建一个仅包含 int 元素的新列表,以及另一个仅包含字符串元素的列表。怎么做?
【问题讨论】:
-
使用
for循环和isinstance(element, int)等 -
你可能想试试
filter方法,或者列表理解
标签: python
我有一个包含不同类型数据(字符串、整数等)的列表。例如,我需要创建一个仅包含 int 元素的新列表,以及另一个仅包含字符串元素的列表。怎么做?
【问题讨论】:
for循环和isinstance(element, int)等
filter 方法,或者列表理解
标签: python
您可以通过list comprehension 完成此操作:
integers = [elm for elm in data if isinstance(elm, int)]
data 是数据。上面所做的是创建一个新列表,用满足if 之后条件的data (elm) 元素填充它,这将检查元素是否是int 的实例。你也可以使用filter:
integers = list(filter(lambda elm: isinstance(elm, int), data))
上面会根据传入的 lambda 过滤掉元素,过滤掉所有非整数。然后,您也可以将其应用于字符串,使用 isinstance(elm, str) 检查是否为字符串实例。
【讨论】:
按类型对列表进行排序,然后使用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']]
【讨论】:
lists = {k:list(v) for k,v in itertools.groupby(l, lambda x: str(type(x)))}。当然,好处是名称是自动生成的,并且可以轻松组织。