부울 목록의 값을 필터링해야하는 값 목록이 있습니다.
list_a = [1, 2, 4, 6]
filter = [True, False, True, False]
다음 줄을 사용하여 새 필터링 된 목록을 생성합니다.
filtered_list = [i for indx,i in enumerate(list_a) if filter[indx] == True]
결과 :
print filtered_list
[1,4]
라인은 작동하지만 (나에게) 약간 과잉으로 보이며 동일한 것을 달성하는 더 간단한 방법이 있는지 궁금합니다.
조언
아래 답변에 제공된 두 가지 좋은 조언 요약 :
1- filter
내장 함수이기 때문에 내가했던 것처럼 목록의 이름을 지정하지 마십시오 .
2- 불필요하기 때문에 True
내가했던 것과 같은 것을 비교하지 마십시오 if filter[idx]==True..
. 사용 if filter[idx]
만으로 충분합니다.
if filter[indx] == True
마십시오 하지 사용 ==
당신이 신분을 확인하려는 경우 True
사용 is
. 어쨌든이 경우 전체 비교는 쓸모가 없으므로 간단히 사용할 수 있습니다 if filter[indx]
. 마지막으로 내장 이름을 변수 / 모듈 이름 으로 사용 하지 마십시오 (이름을 참조하고 있습니다 filter
). 같은 것을 사용하여 included
(가) 그래서, if
잘 읽고 ( if included[indx]
).