UFO ET IT

파이썬 집합 이해력

ufoet 2020. 11. 8. 11:38
반응형

파이썬 집합 이해력


그래서 저는 숙제에이 두 가지 문제가 있고 두 번째 문제에 갇혀 있습니다.

  1. Python Set Comprehension (Python의 Set Builder 표기법에 해당)을 사용하여 100보다 작은 모든 소수 집합을 생성합니다. 소수는 1보다 크고 다음 이외의 다른 정수로 나눌 수없는 정수입니다. 그 자체와 1. 소수 집합을 변수에 저장합니다 (추가 부분에 필요합니다). 소수 집합을 출력합니다 (예 : 인쇄 기능 사용).

  2. Python Set Comprehension을 사용하여 100 미만의 소수로 구성된 모든 소수 쌍으로 구성된 정렬 된 쌍 세트 (길이 2의 튜플)를 생성합니다. 소수 쌍은 모두 소수 인 연속 된 홀수 쌍입니다. 소수 쌍 세트를 변수에 저장하십시오. 당신의 1 번 세트는 매우 도움이 될 것입니다. 프라임 페어 세트를 출력합니다.

첫 번째 경우 이것은 완벽하게 작동합니다.

r= {x for x in range(2, 101) 
if not any(x % y == 0 for y in range(2, x))} 

그러나 나는 두 번째에 꽤 난처합니다. 나는 세트 r의 데카르트 곱을 무언가로 가져와야 할 수도 있다고 생각하지만 확실하지 않습니다.

이것은 나를 다소 가까워 지지만 연속적인 쌍을 원합니다.

cart = { (x, y) for x in r for y in r
     if x < y }

primes = {x for x in range(2, 101) if all(x%y for y in range(2, min(x, 11)))}

나는 테스트를 조금 단순화 - if all(x%y대신if not any(not x%y

나는 또한 y의 범위를 제한했습니다. 제수> sqrt (x)에 대한 테스트에는 의미가 없습니다. 따라서 max (x) == 100은 max (y) == 10을 의미합니다. x <= 10의 경우 y도 <x 여야합니다.

pairs = {(x, x+2) for x in primes if x+2 in primes}

소수 쌍을 생성하고 테스트하는 대신 하나를 얻고 해당하는 더 높은 소수가 있는지 확인하십시오.


도우미 함수로 적절한 술어를 빌드하여 깨끗하고 명확한 솔루션을 얻을 수 있습니다. 즉, 일반 수학 집합 표기법으로 답을 작성하는 것과 동일한 방식으로 Python set-builder 표기법을 사용합니다.

집합 이해이면의 전체 아이디어는 우리가 수작업으로 수학을하는 것과 같은 방식으로 코드를 작성하고 추론 할 수 있도록하는 것입니다.

적절한 술어가 있으면 문제 1은 다음과 같이 단순화됩니다.

 low_primes = {x for x in range(1, 100) if is_prime(x)}

그리고 문제 2는 다음을 단순화합니다.

 low_prime_pairs = {(x, x+2) for x in range(1,100,2) if is_prime(x) and is_prime(x+2)}

이 코드가 문제 사양의 직접 번역 인 "프라임 쌍은 모두 소수 인 연속 된 홀수 쌍입니다."라는 점에 유의하십시오.

PS 저는 숙제 문제에 대한 답을 실제로주지 않고 올바른 문제 해결 기술을 제공하려고합니다.


다음과 같이 쌍을 생성 할 수 있습니다.

{(x, x + 2) for x in r if x + 2 in r}

그런 다음 남은 것은 첫 번째 예에서 이미 수행 한 것처럼이를 프라임으로 만드는 조건을 얻는 것입니다.

다른 방법으로 : (대규모 소수 집합의 경우 더 느리지 만)

{(x, y) for x in r for y in r if x + 2 == y}

참고 URL : https://stackoverflow.com/questions/21770885/python-set-comprehension

반응형