class Solution:
def diffWaysToCompute(self, input: str) -> List[int]:
def compute(left, right, op):
results = []
for l in left:
for r in right:
results.append(eval(str(l) + op + str(r)))
return results
if input.isdigit():
return [int(input)]
results = []
for index, value in enumerate(input):
if value in "-+*":
left = self.diffWaysToCompute(input[:index])
right = self.diffWaysToCompute(input[index + 1: ])
results.extend(compute(left, right, value))
return results
*, -, + 연산자가 등장할 때 좌/우 분할을 하고 각각 계산 결과를 턴한다.
eval() 함수는 문자열을 파이상하고 파이썬 표현식으로 처리해주는 (evaluate) 역할을 한다.
>> eval('4+5') 9
append() vs extend()
리스트에 또 다른 리스트를 삽입할 때 append()는 이처럼 리스트 전체를 또 다른 엘리먼트로 처리한다.>> a = [1,2,3] >> b = [4,5] >> a.append(b) >> a [1,2,3,[4,5]]
extend()는 삽입 대상의 리스트를 풀어서 각각의 엘리먼트로 확장해 삽입한다.
>> a = [1,2,3] >> b = [4,5] >> a.extend(b) >> a [1,2,3,4,5]