스노우오렌지
20
2020-01-12 17:46:55
4
557

python lambda 함수 어떻게 if를 여러번 사용하나요??


"ADCBBBBCABBCBDACBDCAACDDDCAABABDBCBCBDBDBDDABBAAAAAAADADBDBCBDABADCADC"

같은 문자열이 주어지고
, A 4, B 3, C 2, D 1점이라고 할 때 문자열에 사용된

알파벳 점수의 총합을
 map 함수와 람다식을 이용해 구하십시오.


라는 문제인데

람다랑 map이랑 생소해서 하나 조건은 하겠는데

elif도 안먹어서 if로만 여러번해야하고 else 반드시 있어야되는 것은 알겠는데

lst2 = list(map(lambda x: 4 if x == 'A' if x == 'B' .......)

요런식으로 해도 안되겠고 모르겠네요ㅠ

0
0
  • 답변 4

  • 곰개발자
    2020-01-12 18:40:19

    Reduce를 사용해야 될 거 같네요.

    0
  • soyeomul
    208
    2020-01-12 21:38:07

    map 람다는 아니지만 한번 적어봤어요~


    # -*- coding: utf-8 -*-

    raw_string = """\
    ADCBBBBCABBCBDACBDCAACDDDCAABABDBCBCBDBDBDDABBAAAAAAADADBDBCBDABADCADC
    """

    data = raw_string.strip()

    r = []
    for s in data:
        if "A" in s:
            r.append(4)
        elif "B" in s:
            r.append(3)
        elif "C" in s:
            r.append(2)
        else:
            r.append(1)

    r_sum = sum(r)

    print(r_sum) # 184


    0
  • esrse
    783
    2020-01-13 12:02:20

    A, B, C, D의 unicode code point가 연속돼 있다는 점에 착안한 방법입니다.


    sum(map(lambda c: 4 - (ord(c) - ord('A')), 'ADCBBBBCABBCBDACBDCAACDDDCAABABDBCBCBDBDBDDABBAAAAAAADADBDBCBDABADCADC'))


    0
  • esrse
    783
    2020-01-13 12:04:44 작성 2020-01-13 12:07:28 수정됨

    굳이 lambda 에 여러개의 ternary operator 를 사용해야한다면 이렇게 할 수 있습니다.


    sum(map(lambda x: 4 if x == 'A' else 3 if x == 'B' else 2 if x == 'C' else 1, 'ADCBBBBCABBCBDACBDCAACDDDCAABABDBCBCBDBDBDDABBAAAAAAADADBDBCBDABADCADC'))


    0
  • 로그인을 하시면 답변을 등록할 수 있습니다.