O (n) 목록 빼기

수영하다

AoC 퍼즐 작업을 할 때 목록을 빼고 싶었습니다 (순서 유지).

def bag_sub(list_big, sublist):
    result = list_big[:]
    for n in sublist:
        result.remove(n)
    return result

필자는 list.remove불필요하게 비효율적으로 보이는 호출 (그 자체가 O (n))이 루프 내에 포함되는 방식이 마음에 들지 않았습니다 . 그래서 그것을 피하기 위해 다시 작성하려고했습니다.

def bag_sub(list_big, sublist):
    c = Counter(sublist)
    result = []
    for k in list_big:
        if k in c:
            c -= Counter({k: 1})
        else:
            result.append(k)
    return result
  1. 이것은 지금 O (n) Counter.__isub__입니까 , 아니면 사용법이 여전히 문제가 있습니까?

  2. 이 접근 방식은 요소가 해시 가능해야하며 원본에는 없었던 제한 사항입니다. 이 추가 제한을 생성하지 않는 O (n) 솔루션이 있습니까? 파이썬보다 더 나은 "가방"데이터 유형이 collections.Counter있습니까?

sublist길이의 절반 이라고 가정 할 수 있습니다 list_big.

user2357112는 Monica를 지원합니다.

이것은 지금 O (n) Counter.__isub__입니까 , 아니면 사용법이 여전히 문제가 있습니까?

이것은 Counter.__isub__양수가 아닌 값을 버릴 때 모든 키통과 한다는 점을 제외하면 예상되는 경우 O (n) 입니다. 키 값에서 "일반적인"방식으로 1을 빼고 c[k]대신 확인하는 것이 좋습니다 k in c. (의 c[k]경우 0 k not in c이므로 in확인이 필요하지 않습니다 .)

if c[k]:
    c[k] -= 1
else:
    result.append(k)

이 추가 제한을 생성하지 않는 O (n) 솔루션이 있습니까?

입력이 정렬 된 경우에만 병합 정렬 병합의 표준 변형이이를 수행 할 수 있습니다.

파이썬보다 더 나은 "가방"데이터 유형이 collections.Counter있습니까?

collections.Counter 파이썬의 가방입니다.

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

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

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

목록 목록에서 목록 빼기

분류에서Dev

목록 목록에서 두 값 빼기

분류에서Dev

R의 목록 내에서 행렬 목록 빼기

분류에서Dev

더하기 / 빼기 아코디언 목록

분류에서Dev

주어진 크기 n 목록에서 2 ^ (n-1) 연결 목록 찾기

분류에서Dev

다각형 목록에서 내부 고리 빼기

분류에서Dev

데이터 구조가 다른 목록 빼기

분류에서Dev

반복되는 요소가있는 성배의 목록 빼기

분류에서Dev

목록에서 3 개의 개별 요소를 찾기위한 O (log n) 알고리즘 설계

분류에서Dev

O (1) 대신 O (n)의 C ++ 분할 목록

분류에서Dev

튜플 목록을 얻기 위해 목록을 N 부분으로 분할

분류에서Dev

체계-n 항 빼기 함수 문제

분류에서Dev

목록의 목록 이후에 더하기 및 빼기 버튼이 작동하지 않음 (JavaScript)

분류에서Dev

연결 목록의 길이 속성이 O (n) 인 이유

분류에서Dev

Android-다음 블록까지 빼기

분류에서Dev

목록 목록 만들기

분류에서Dev

목록 내에서 빼기를 수행하는 방법은 무엇입니까?

분류에서Dev

두 목록 간의 값 비교 및 공통 요소 값 빼기-C #

분류에서Dev

다른 목록 안에있는 목록의 모든 n 번째 항목 가져 오기

분류에서Dev

O (n) 시간에 log n 개의 가장 큰 항목 찾기

분류에서Dev

n 번째 요소, n + 1 번째 요소 등을 기준으로 목록 목록 정렬

분류에서Dev

n 요소로 목록을 그룹화하는 방법 (여기서 n은 목록에 정의 됨)

분류에서Dev

기본 데이터 구조가 목록 인 경우 heapq의 푸시 작업이 어떻게 O (log n) 시간이 될 수 있습니까?

분류에서Dev

N 번 반복되는 변경 가능한 항목 목록 만들기

분류에서Dev

크기가 n 목록의 모든 가능한 K 조합

분류에서Dev

Django 관리자 목록보기에서 n + 1 쿼리 방지

분류에서Dev

텍스트 목록에서 n 번째 문자 찾기

분류에서Dev

목록이 주어진 n 개의 powerset 세기

분류에서Dev

N 요소 목록을 S 크기의 노드로 분류

Related 관련 기사

  1. 1

    목록 목록에서 목록 빼기

  2. 2

    목록 목록에서 두 값 빼기

  3. 3

    R의 목록 내에서 행렬 목록 빼기

  4. 4

    더하기 / 빼기 아코디언 목록

  5. 5

    주어진 크기 n 목록에서 2 ^ (n-1) 연결 목록 찾기

  6. 6

    다각형 목록에서 내부 고리 빼기

  7. 7

    데이터 구조가 다른 목록 빼기

  8. 8

    반복되는 요소가있는 성배의 목록 빼기

  9. 9

    목록에서 3 개의 개별 요소를 찾기위한 O (log n) 알고리즘 설계

  10. 10

    O (1) 대신 O (n)의 C ++ 분할 목록

  11. 11

    튜플 목록을 얻기 위해 목록을 N 부분으로 분할

  12. 12

    체계-n 항 빼기 함수 문제

  13. 13

    목록의 목록 이후에 더하기 및 빼기 버튼이 작동하지 않음 (JavaScript)

  14. 14

    연결 목록의 길이 속성이 O (n) 인 이유

  15. 15

    Android-다음 블록까지 빼기

  16. 16

    목록 목록 만들기

  17. 17

    목록 내에서 빼기를 수행하는 방법은 무엇입니까?

  18. 18

    두 목록 간의 값 비교 및 공통 요소 값 빼기-C #

  19. 19

    다른 목록 안에있는 목록의 모든 n 번째 항목 가져 오기

  20. 20

    O (n) 시간에 log n 개의 가장 큰 항목 찾기

  21. 21

    n 번째 요소, n + 1 번째 요소 등을 기준으로 목록 목록 정렬

  22. 22

    n 요소로 목록을 그룹화하는 방법 (여기서 n은 목록에 정의 됨)

  23. 23

    기본 데이터 구조가 목록 인 경우 heapq의 푸시 작업이 어떻게 O (log n) 시간이 될 수 있습니까?

  24. 24

    N 번 반복되는 변경 가능한 항목 목록 만들기

  25. 25

    크기가 n 목록의 모든 가능한 K 조합

  26. 26

    Django 관리자 목록보기에서 n + 1 쿼리 방지

  27. 27

    텍스트 목록에서 n 번째 문자 찾기

  28. 28

    목록이 주어진 n 개의 powerset 세기

  29. 29

    N 요소 목록을 S 크기의 노드로 분류

뜨겁다태그

보관