파이썬 while문 간단한 질문 드립니다
조회수 830회
너무 기초적인 질문이라 답답하실 수도 있지만 도저히 해결책이 안나와서 이렇게 질문 드립니다
a=[0,1,2,3]
b=[2,3,4,5]
c=[]
while sum(c) < 3:
for i in a:
c.append(b[i])
print(c)
현재 이런 상황인데
제가 의도하는건 c리스트에 원소가 하나씩 들어가서 합이 3이 넘으면 (물론 예시기준입니다) c리스트에 그만 들어가게 하고 싶거든요... 근데 그게 적용이 안되네요 ㅠㅠ 혹시 어떻게 하는게 좋을까요 ㅠㅠ
2 답변
-
주신 코드는
while
밑에서a
에 대해서for
를 별다른 조건 없이 돌리고 있습니다. 그러니while
이 한 번 돌 때마다a
전체를 돌려서c
에 꽂고 그 다음을 진행해서 빠져나오게 되죠. 결과적으로는b
전체가c
에 꽂히게 되고요.적당한 종결 조건을 주면 됩니다. 데모 확인해 보세요.
# a = [0,1,2,3] // 사실 필요없음 b = [0, 1, 1, 1, 4, 5] c = [] # 아직 c의 원소의 합이 3을 안 넘을 때만 다음을 실행한다: while sum(c) < 3 : for i in b : # b의 원소를 하나 넣으려고 봤는데 이번에 넣는 것까지 합하면 3이 넘어버릴 경우 if (sum(c) + i) > 3 : # for를 때려치움 break # 안 넘을 것 같으면 else : # 넣음 c.append(i) print(c) # [0, 1, 1, 1]
-
답글은 엽토군님이 설명까지 다 하셨으므로 전 번외(검색하는 누군가를 위해...)로 적습니다.
functools 모듈에 reduce 라는 펑션이 제공됩니다. 이것의 역활은 1, 2, 3, 4 이라고 리스트가 있을 때 1 하고 2 를 더하고 그 결과를 다시 함수의 첫번째 인자로 보내고 다음 숫자를 두번째 인자로 줘서 계속 더하는 함수입니다.
즉...((1 + 2) + 3) + 4) 이렇게 수행되는 함수입니다. 앞의 인수가 바로전 합값이므로 그것을 통해 비교할 수 있습니다.
from functools import reduce b = [2, 3, 4, 5, 6, 7] limitNum = 15 # 제한크기 reduce(lambda n, m: n + m if n < limitNum else n, b) # 합이 15이하까지만 합산결과를 내줍니다. 20
댓글 입력