[List, 중급] 리스트의 분기문제 (bifurcate)

출처 : python 30 seconds of code (CC0-1.0 라이센스)

주어진 필터 리스트를 바탕으로 주어진 값을 두개의 그룹으로 나누세요.

1) 필터 리스트를 기반으로 그룹에 요소를 추가하기 위해, list comprehension과 zip()을 사용하세요.
2) 만약, 필터가 True이면 첫 번째 그룹에 추가하고, 아니면 두번째 그룹에 추가하세요.

EXAMPLES

bifurcate(['beep', 'boop', 'foo', 'bar'], [True, True, False, True])  # 출력: [ ['beep', 'boop', 'bar'], ['foo'] ]

=============== 아래의 코드에 완성 ===============

def bifurcate(lst, filter):
    pass

이승현 640

M 2020년 12월 11일 4:16 오후

목록으로
3개의 답변이 있습니다. 1 / 1 Page
def bifurcate(lst, filter):
    rst = [[],[]]
    [rst[0].append(l) if f else rst[1].append(l) for l,f in zip(lst,filter)]
    return rst

저요저요서평단

2021년 1월 7일 9:27 오후

print([list(zip(bifurcate[0], bifurcate[1]))[i][0] for i in range(len(list(zip(bifurcate[0], bifurcate[1])))) if list(zip(bifurcate[0], bifurcate[1]))[i][1]])
# ['beep', 'boop', 'bar']

zip()을 사용하면 더 복잡해 지는 것 같아.
zip() 없이 하면...

print([bifurcate[0][i] for i in range(len(bifurcate[0])) if bifurcate[1][i]])
# ['beep', 'boop', 'bar']

sictomm

M 2021년 1월 30일 4:01 오후

두번째 그룹을 빼먹었네요.^^ - sictomm님, 2021년 1월 30일 4:03 오후 추천 , 대댓글
def bifurcate(lst, filter):
    zipped = zip(lst, filter)    
    filtered_true = [i for i,f in zipped if f]    
    filtered_false = [item for item in lst if item not in filtered_true]    
    return [filtered_true, filtered_false]

zip이 iterator였군요. ㅎ

wjpark11

M 2021년 4월 23일 10:11 오전