2016-08-12 3 views
0

나는 이것 (아마도 내가 컴퓨터 프로그래밍을 처음 사용했기 때문에)에 아주 붙어있다. 내가 질문에서, 다음과 같은 코드가 있습니다 : [Python: Find all possible combinations of parts of a given number파이썬 : 숫자,리스트 길이, 처음과 마지막 숫자를주는 주어진 숫자의 부분들의 조합을 계산하는 방법

def sum_to_n(n, size, limit=None): 
    """Produce all lists of `size` positive integers in decreasing order 
    that add up to `n`.""" 
    if size == 1: 
     yield [n] 
     return 
    if limit is None: 
     limit = n 
    start = (n + size - 1) // size 
    stop = min(limit, n - size + 1) + 1 
    for i in range(start, stop): 
     for tail in sum_to_n(n - i, size - 1, i): 
      yield [i] + tail 

for partition in sum_to_n(8, 3): 
    print (partition) 

[6, 1, 1] 
[5, 2, 1] 
[4, 3, 1] 
[4, 2, 2] 
[3, 3, 2] 

은 매우 유용하지만 몇 가지 옵션을 설정하기 위해이를 수정하기 위해 노력하고있어.

def sum_to_n(n,first, last, size, limit=None): 
    if size == 1: 
     yield [n] 
     return 
    if limit is None: 
     limit = n 
    start = (n + size - 1) // size 
    stop = min(limit, n - size + 1) + 1 
    for i in range(start, stop): 
     if i <=first: 
      for tail in sum_to_n(n - i,first,last, size - 1, i): 
       ll=len(tail) 
       if tail[ll-1]==last: 
        yield [i] + tail 

for i in sum_to_n(8,4,1,3): 
    if i[0]==4 and i[size-1]==1: 
     print(i) 
    if i[0]>4: 
     break 

[4,3,1] 

그러나 더 큰 정수로 프로그램입니다 : 나는이 목록의 첫 번째 숫자는 4와리스트의 마지막 내가이 솔루션을 사용하는 순간 1. 인 느릅 나무의 결과 만 갖고 싶어한다고 가정 원치 않는 많은 작업을 수행합니다. 예를 들어, for i in range(start, stop):은 목록의 가능한 모든 첫 번째 숫자를 계산하며 "첫 번째"매개 변수가 내장되어 있지 않고 함수가 없으면 작동하지 않습니다. 요청 된 계산 만 수행하기 위해 필요한 매개 변수를 제공하는 함수를 호출하는 더 빠르고 더 나은 솔루션을 제안 할 수 있습니까?

+0

를, 나는 같은 목록을 얻을 수 있지만 반대 순서로한다. 너는 실제로 너가 보여줄 명령을받는거야? –

+0

아니요 예를 들어 실제 출력이 아닙니다 –

답변

1

첫 번째 숫자를 알고 있기 때문에 마지막 숫자를 알아야합니다. 같은 줄 것이다 당신의 예에서

: 내가 파이썬 3.5.2에서 첫 번째 코드를 실행하면

for res in sum_to_n(n=8-4, last=1, size=3-1): 
    print([4] + res) 
+0

예 흥미롭고 고무적입니다. 마지막으로 당신의 아이디어를 사용하는 방법을 찾았습니다. 첫 번째와 마지막 숫자의 합 "n"을 뺀 다음 "in between"숫자에 대해서만 함수를 호출했습니다. 그런 다음 세 부분, 즉 첫 번째, 다시 시작, 마지막으로 참여하십시오. 이렇게하면 더 빠릅니다. –