파이썬 리스트 컴프레이션 사용할때 반복문 없이 사용이 가능한가요?

조회수 1439회

예로 a = [] 라는 리스트가 있는데 반복문이나 조건문을 사용해 값을 넣는다고 할떄 빈값이 있을수도 있는 경우 아래식처럼 만는걸 리스트 컴프레이션으로 만들 수있는지 궁금합니다.

if not a:
    pass
else:
    a.append(value)

이걸

print(sum[if not a  pass else a.append(value)])

이렇런식으로 값이 없으면 넘어가고 있으면 뭔가를 하라고 만들고 싶은데 구글을 검색해봐도 전부 for문이 들어가 있는데 for문과 if문을 꼭 같이 써야하는건지 궁금합니다.

3 답변

  • 좋아요

    3

    싫어요
    채택 취소하기

    리스트 컴프리헨션은 아니지만 이럴때는 함수형 프로그래밍 기법인 filter 가 유용할것같아요.

    이렇게 쓰시면 되요. 리스트 a에서 1만 뽑아낸다고 할때

    a = [1, 2, 3, 2, 5, 1, 7, 1]
    b = list(filter(lambda x: x == 1, a))
    print(b)
    

    이런 코드를 쓰시면 됩니다.

    • (•́ ✖ •̀)
      알 수 없는 사용자
  • 예. 가능합니다.

    리스트컴프리헨션은 간략히,

    [값.메소드 for 값 in 집합 if 조건]
    

    개념이므로, 말씀하신 예문

    if not A:
        pass
    else:
        a.append(value)
    

    를 리스트내포로 직역(?)하면

    [value for value in a if not A] #약간 어색하지만..
    

    입니다.

    간단한 예제를 몇 개 보여드리겠습니다.

    # 예1) a 리스트 중 3의 배수나 5의 배수인 정수의 합을 출력하고 싶다
    a = [1,2,3,4,5,6,7,8,9,10]
    print(sum([i for i in a if i % 3 == 0 or i % 5 == 0]))
    # 결과 : 33
    
    # 예2) 문자열 리스트 중 길이가 4 이상인 문자열만 골라 대문자로, 나머지는 소문자로
    리스트 = ['One','Two','Three','Four','Five','Six','Seven','Eight','Nine','Ten']
    print([값.upper() if len(값) > 3 else 값.lower() for 값 in 리스트 ])
    # 결과 : ['one', 'two', 'THREE', 'FOUR', 'FIVE', 'six', 'SEVEN', 'EIGHT', 'NINE', 'ten']
    
    
    #예3) 메소드가 아니어도 됩니다.
    print(["짝수" if 값 % 2 == 0 else "홀수" for 값 in a])
    #결과 : ['홀수 ', '짝수', '홀수 ', '짝수', '홀수 ', '짝수', '홀수 ', '짝수', '홀수 ', '짝수']
    

    질문을 조금만 더 구체적으로 해주시면 좋겠습니다ㅎ

    구구절절 말이 길어졌네요;

    • (•́ ✖ •̀)
      알 수 없는 사용자
  • 만일 더하기를 한다면...

    numbers = [1, 2, 3, 4, 5, 5, 5 , 7, 8, 9, 10]
    summation = sum([number for number in numbers if number == 5])
    print (summation)
    

    만약 특정 숫자를 선택해서 새로운 리스트에 저장하려면

    
    get_num = [number for number in numbers if number ==5]
    print(get_num)
    
    • (•́ ✖ •̀)
      알 수 없는 사용자

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)