파이썬에서 세트 간의 공통성을 찾기위한 재귀

user12639694

여러 세트 (숫자는 알 수 없음)가 있고 세트 간의 공통성을 찾고 싶습니다. 세트간에 일치 (80 % 일치)가있는 경우이 두 세트를 병합 한 다음 새 세트를 다시 실행하고 싶습니다. 처음부터 다른 모든 세트에 맞서야합니다.

예를 들면 :

A : {1,2,3,4}
B : {5,6,7}
C : {1,2,3,4,5}
D : {2,3,4,5,6,7}

그런 다음 A가 실행되고 A와 B 사이에 공통성이 없으며 공통 목표를 달성하는 C에 대해 A를 실행하므로 이제 새로운 세트 AC = {1,2,3,4,5}가 있으며 이제 AC를 B는 임계 값에 도달하지 않지만 D는 새 ACD 세트를 가지고 있으며 이제 다시 실행하여 이제 B로 히트를했습니다.

현재 2 개의 루프를 사용하고 있지만 2 세트를 비교하는 경우에만 해결됩니다.

공통성을 계산하기 위해 다음 계산을 사용합니다.

overlap = a_set & b_set
universe = a_set | b_set
per_overlap = (len(overlap)/len(universe))

나는 해결책이 재귀 함수 여야한다고 생각하지만 이것을 작성하는 방법을 잘 모르겠습니다. 저는 파이썬에 익숙하지 않거나 이것을 수행하는 다른 간단한 방법이있을 수 있습니다.

제임스

나는 이것이 당신이 찾고있는 것을 믿습니다. 일치 할 때마다 다시 시작되기 때문에 복잡성은 끔찍합니다. 재귀가 필요하지 않습니다.

def commonality(s1, s2):
    overlap = s1 & s2
    universe = s1 | s2
    return (len(overlap)/len(universe))

def set_merge(s, threshold=0.8):
    used_keys = set()
    out = s.copy()
    incomplete = True
    while incomplete:
        incomplete = False
        restart = False
        for k1, s1 in list(out.items()):
            if restart:
                incomplete = True
                break
            if k1 in used_keys:
                continue
            for k2, s2 in s.items():
                if k1==k2 or k2 in used_keys:
                    continue
                print(k1, k2)
                if commonality(s1, s2) >= threshold:
                    out.setdefault(k1+k2, s1 | s2)
                    out.pop(k1)
                    if k2 in out:
                        out.pop(k2)
                    used_keys.add(k1)
                    used_keys.add(k2)
                    restart = True
                    break
    out.update({k:v for k,v in s.items() if k not in used_keys})
    return out

특정 예에서는 다른 조합이 임계 값 미만이므로 A와 C 만 병합합니다.

set_dict = {
    'A' : {1,2,3,4},
    'B' : {5,6,7},
    'C' : {1,2,3,4,5},
    'D' : {2,3,4,5,6,7},
}
set_merge(set_dict)
# returns:
{'B': {5, 6, 7},
 'D': {2, 3, 4, 5, 6, 7},
 'AC': {1, 2, 3, 4, 5}}

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

메모리 공간을 줄이기위한 파이썬 재귀 적 수율

분류에서Dev

동일한 프로젝트 내에서 파이썬의 재귀 요구 사항?

분류에서Dev

파이썬에서 재귀 적으로 다중 분기 중첩 트리 정의

분류에서Dev

크기 범위의 파일을 재귀 적으로 찾기

분류에서Dev

JSP 페이지에서 트리 구조를 생성하기위한 Java의 재귀 루프

분류에서Dev

이메일 주소의 공백에 대한 xml 파일에서 재귀 찾기 및 바꾸기

분류에서Dev

배열의 처음 3 개 요소에서 자음을 찾기위한 문자 배열의 재귀 함수

분류에서Dev

재귀를위한 공간 복잡성

분류에서Dev

완전한 공간 임의성을위한 1 차원 데이터 세트 가져 오기 spatstat 승리

분류에서Dev

기준에 따른 세트의 재귀 할당

분류에서Dev

파이썬에서 재귀 적으로 최대 값을 가진 요소 찾기

분류에서Dev

파일 유형의 조건에 따라 dir 재귀 및 chmodding을 수행하기위한 쉘 스크립트

분류에서Dev

최대 합이있는 하위 목록을 찾기위한 생성 적 재귀

분류에서Dev

재귀 트리의 시간 복잡성

분류에서Dev

파이썬에서 단순화 된 지뢰 찾기 재귀 : 왜이 코드가 성공하지 못합니까?

분류에서Dev

폴더 또는 하위 폴더에서 항목을 찾기위한 Python 재귀

분류에서Dev

프로젝트간에 공통 레이아웃을 공유하기위한 사용자 정의 너겟 패키지 생성

분류에서Dev

두 배열 사이의 동일한 위치에서 동일한 숫자를 찾기위한 재귀 함수

분류에서Dev

파이썬에서 재귀 딕셔너리 생성에 관한 문제

분류에서Dev

하위 데이터 세트의 플롯간에 공통 범례 만들기

분류에서Dev

재귀를 사용하여 파이썬에서 프랙탈 트리 그리기

분류에서Dev

단어를 포함하는 여러 파일을 찾기 위해 루트에서 재귀 적으로 검색

분류에서Dev

가장 깊은 수준에서 항목을 찾기위한 Javascript 객체 재귀

분류에서Dev

재귀를 통해 트리의 노드에서 루트까지 모든 부모 찾기

분류에서Dev

파이썬 스크립트에 대한 재귀 검색

분류에서Dev

재귀 설명을 사용한 이진 트리 탐색 (파이썬)

분류에서Dev

파이썬의 원래 위치에서 문장 재생성

분류에서Dev

파이썬에서 재귀를 사용하여 주어진 숫자의 기본 값 찾기

분류에서Dev

파이썬의 재귀 함수에서 공유 목록을 어떻게 정의 할 수 있습니까?

Related 관련 기사

  1. 1

    메모리 공간을 줄이기위한 파이썬 재귀 적 수율

  2. 2

    동일한 프로젝트 내에서 파이썬의 재귀 요구 사항?

  3. 3

    파이썬에서 재귀 적으로 다중 분기 중첩 트리 정의

  4. 4

    크기 범위의 파일을 재귀 적으로 찾기

  5. 5

    JSP 페이지에서 트리 구조를 생성하기위한 Java의 재귀 루프

  6. 6

    이메일 주소의 공백에 대한 xml 파일에서 재귀 찾기 및 바꾸기

  7. 7

    배열의 처음 3 개 요소에서 자음을 찾기위한 문자 배열의 재귀 함수

  8. 8

    재귀를위한 공간 복잡성

  9. 9

    완전한 공간 임의성을위한 1 차원 데이터 세트 가져 오기 spatstat 승리

  10. 10

    기준에 따른 세트의 재귀 할당

  11. 11

    파이썬에서 재귀 적으로 최대 값을 가진 요소 찾기

  12. 12

    파일 유형의 조건에 따라 dir 재귀 및 chmodding을 수행하기위한 쉘 스크립트

  13. 13

    최대 합이있는 하위 목록을 찾기위한 생성 적 재귀

  14. 14

    재귀 트리의 시간 복잡성

  15. 15

    파이썬에서 단순화 된 지뢰 찾기 재귀 : 왜이 코드가 성공하지 못합니까?

  16. 16

    폴더 또는 하위 폴더에서 항목을 찾기위한 Python 재귀

  17. 17

    프로젝트간에 공통 레이아웃을 공유하기위한 사용자 정의 너겟 패키지 생성

  18. 18

    두 배열 사이의 동일한 위치에서 동일한 숫자를 찾기위한 재귀 함수

  19. 19

    파이썬에서 재귀 딕셔너리 생성에 관한 문제

  20. 20

    하위 데이터 세트의 플롯간에 공통 범례 만들기

  21. 21

    재귀를 사용하여 파이썬에서 프랙탈 트리 그리기

  22. 22

    단어를 포함하는 여러 파일을 찾기 위해 루트에서 재귀 적으로 검색

  23. 23

    가장 깊은 수준에서 항목을 찾기위한 Javascript 객체 재귀

  24. 24

    재귀를 통해 트리의 노드에서 루트까지 모든 부모 찾기

  25. 25

    파이썬 스크립트에 대한 재귀 검색

  26. 26

    재귀 설명을 사용한 이진 트리 탐색 (파이썬)

  27. 27

    파이썬의 원래 위치에서 문장 재생성

  28. 28

    파이썬에서 재귀를 사용하여 주어진 숫자의 기본 값 찾기

  29. 29

    파이썬의 재귀 함수에서 공유 목록을 어떻게 정의 할 수 있습니까?

뜨겁다태그

보관