2016-10-03 2 views
2

다른 유형의 데이터 (문자열, 정수 등)가있는 목록이 있습니다. 예를 들어, int 요소 만있는 새 목록과 문자열 요소 만있는 목록을 만들어야합니다. 그것을하는 방법?목록의 각 요소 유형별 필터링 요소

+0

사용'for' 루프와'isinstance (요소, INT)'등 – furas

+0

그리고 당신은 시도 할 수있는' 필터 '방법 또는 목록 이해 –

답변

3

당신은 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)) 

는 위의 모든 비 정수를 필터링 전달 된 람다를 기반으로 요소를 필터링합니다. 그런 다음 문자열에 적용하여 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)))}'에서 list. 물론 이름이 자동으로 생성되고 쉽게 구성 될 수 있다는 이점이 있습니다. – TigerhawkT3