>

모두. 파이썬의 목록에서 피타고라스 트리플을 제거하는 방법에 대한 질문이 있습니다. 구체적인 질문은 피타고라스 트리플을 포함하는 목록을 만들도록 요청하지만 각 트리플은 한 번만 발생할 수 있습니다. 내 기능은 다음과 같습니다.

import numpy as np
def list_pythagorean_triples(amin,cmax):
    x=list(range(amin,cmax))
    y=[]
    for a in x:
        for b in x:
            c=np.sqrt(a**2+b**2)
            if  c==int(c) and c<=cmax:
                s=a,b,int(c)
                y.append(s)      
    return y
U = list_pythagorean_triples(3,12)
U.sort()
print(U)

[(3, 4, 5), (4, 3, 5), (6, 8, 10), (8, 6, 10)] 를 얻었다  결과로서. 그러나 예상되는 것은 [(3, 4, 5), (6, 8, 10)] 입니다. .

코드를 수정할 생각이 있습니까? 대단히 감사합니다!


  • 답변 # 1

    세트를 사용하고 튜플 내부의 값을 정렬하여 중복을 피할 수 있습니다.

    import numpy as np
    def list_pythagorean_triples(amin,cmax):
        x=list(range(amin,cmax))
        y=set() # use a set
        for a in x:
            for b in x:
                c=np.sqrt(a**2+b**2)
                if  c==int(c) and c<=cmax:
                    s= (min(a,b), max(a,b), int(c))  # order tuple content by size
                    y.add(s)  # sets use add, not append
        return list(y)
    U = list_pythagorean_triples(3,12)
    U.sort()
    print(U)
    
    

    출력 :

    [(3, 4, 5), (6, 8, 10)]
    
    

  • 답변 # 2

    이 문제를 해결하는 방법 :

    추가하고 중복 제거하기 전에 튜플을 정렬 할 수 있습니다

    def list_pythagorean_triples(amin,cmax):
        x=range(amin,cmax)
        y=[]
        for a in x:
            for b in x:
                c=np.sqrt(a**2+b**2)
                if  c==int(c) and c<=cmax:
                    s=a,b,int(c)
                    y.append(sorted(s))      
        return sorted(set(y))
    
    

    또는 더 나은 방법으로 b 의 값만 사용할 수 있습니다  그것은 a 보다 큽니다 .

    def list_pythagorean_triples(amin,cmax):
        x=range(amin,cmax)
        y=[]
        for a in x:
            for b in range(a,cmax):
                c=np.sqrt(a**2+b**2)
                if  c==int(c) and c<=cmax:
                    s=a,b,int(c)
                    y.append(s)      
        return y
    
    

관련 자료

  • 이전 shell - 특정 명령에 대해서만 도커 진입 점을 비 루트로 실행하는 방법
  • 다음 python - numpy의 정사각형과 입방체를 가져 와서 추가