Reputation: 167
I have list with different types of data (string, int, etc.). I need to create a new list with, for example, only int elements, and another list with only string elements. How to do it?
Upvotes: 7
Views: 14564
Reputation: 49330
Sort the list by type, and then use groupby
to group it:
>>> 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']]
Upvotes: 1
Reputation: 57972
You can accomplish this with list comprehension:
integers = [elm for elm in data if isinstance(elm, int)]
Where data
is the data. What the above does is create a new list, populate it with elements of data
(elm
) that meet the condition after the if
, which is checking if element is instance of an int
. You can also use filter
:
integers = list(filter(lambda elm: isinstance(elm, int), data))
The above will filter out elements based on the passed lambda, which filters out all non-integers. You can then apply it to the strings too, using isinstance(elm, str)
to check if instance of string.
Upvotes: 16