2016-10-03 6 views
2

私は異なる種類のデータ(文字列、intなど)を持つリストを持っています。私は、たとえば、int要素だけを含む新しいリストと、文字列要素だけを持つ別のリストを作成する必要があります。どうやってするの?リストの要素を各要素のタイプ別にフィルタリングします

+0

使用 'for'ループと'でisinstance(要素、整数) 'など – furas

+0

そして、あなたがしようとする場合があります'フィルタメソッドまたはリストの理解 –

答えて

3

あなたはlist comprehensionでこれを達成することができます:

dataがデータである
integers = [elm for elm in data if isinstance(elm, int)] 

。上記のことは、新しいリストを作成し、ifの後の条件を満たす、要素がintのインスタンスであるかどうかをチェックする、dataelm)の要素で構成します。また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 itertools.groupby(l、lambda x:str(type(x)))}'で指定します。もちろん、名前が自動的に生成され、簡単に整理できるという利点があります。 – TigerhawkT3

関連する問題