보완 목록을 계산할 때 중복을 올바르게 처리하는 방법은 무엇입니까?

토마스 바루 첼

이 질문은 이전 질문과 관련이있는 것처럼 보일 수 있지만 (예 : Python, compute list difference ) 정확히 동일하지 않으며 두 가지 제안을 포함하는 최고 등급의 답변조차 다음 질문에 정확히 대답하지 않습니다.

L중복 된 값을 포함 하는 기본 (순서없는) 목록 이 있습니다. 예를 들어 정수 목록을 가져옵니다.

L = [3, 1, 4, 1, 5, 9, 2, 6, 5]

예를 들어 L에서 값을 선택하는 더 작은 목록이 있습니다.

x = [4, 1, 3]

의 요소 순서는의 요소 순서 x와 관련이 없습니다 L.

이제 L-x연결 x과이 차이가 L(순서를 제외하고) 같은 목록을 제공 하는 방식으로 차이를 계산하고 싶습니다 . 더 정확하게 말하면 :

list(sorted(x + D(L,x))) == list(sorted(L))

첫 번째 나쁜 아이디어 는 분명히 세트를 사용하는 것입니다. 복제는 올바르게 처리되지 않기 때문입니다.

두 번째 나쁜 생각 은 다음과 같은 필터와 함께 목록 이해력을 사용하는 것입니다.

[ e for e in L if e not in x ]

1이 값의 한 인스턴스가 예상되는 차이에서 발생해야하지만 내 예제 의 값 이 삭제되기 때문입니다.

내가 볼 수있는 한,이를 수행하는 가장 효율적인 방법은 두 목록을 모두 정렬 한 다음 두 목록을 반복하고 (반복자가 도움이 될 수 있음) 중복을 신중하게 고려하는 것입니다. 이것은 O (n log n) 솔루션입니다.

나는 속도를 찾고 있지 않습니다. 나는 간결한 파이썬 구문이 그것을 할 수 있는지 궁금합니다. 심지어 O (n²) 또는 악화가 하나 개 또는 두 개의 라인에서 예상되는 작업을 할 수있는 경우에 허용 될 수 있습니다.

수영하다

에서 제공하는 다중 집합 작업을 원합니다 collections.Counter.

>>> L = [3, 1, 4, 1, 5, 9, 2, 6, 5]
>>> x = [4, 1, 3]
>>> list((Counter(L) - Counter(x)).elements())
[1, 5, 5, 9, 2, 6]

이것은 O (n) 입니다. 필요한 경우를 사용하여 순서를 유지하고 O (n)유지할 수도 있습니다 OrderedCounter.

from collections import Counter, OrderedDict

class OrderedCounter(Counter, OrderedDict): 
    pass

Este artículo se recopila de Internet, indique la fuente cuando se vuelva a imprimir.

En caso de infracción, por favor [email protected] Eliminar

Editado en
0

Déjame decir algunas palabras

0Comentarios
Iniciar sesiónRevisión de participación posterior

Artículos relacionados

curl을 사용할 때 gzip으로 압축 된 페이지를 올바르게 처리하는 방법은 무엇입니까?

.get_queryset ()을 재정의 할 때 오류를 올바르게 반환하는 방법은 무엇입니까?

배열 목록의 모든 개체를 인쇄하고 수량을 올바르게 계산하는 방법은 무엇입니까?

Array [String]을 올바르게 반복하는 방법은 무엇입니까?

kthread로 완성을 올바르게 구현하는 방법은 무엇입니까?

RecyclerView 항목이 때때로 올바르게 확장되지 않습니다. 항목을 확장하는 가장 좋은 방법은 무엇입니까?

구매 복원을 처리 할 때 오래된 거래를 처리하는 방법은 무엇입니까?

유형 제네릭을 사용할 때 클래스를 추상 클래스로 올바르게 캐스팅하는 방법은 무엇입니까?

Android : SharedPreferences.Editor에서 commit ()을 호출 할 때 Lint 경고- "Apply () 사용 고려"를 올바르게 억제하는 방법은 무엇입니까?

doxygen에서 할 일 목록을 계산하는 방법은 무엇입니까?

Spark / Scala에서 Option을 올바르게 처리하는 방법은 무엇입니까?

'default (T)'처리에 대한 원시적 집착을 올바르게 피하는 방법은 무엇입니까?

퓨마와 레일에서 동시성을 올바르게 처리하는 방법은 무엇입니까?

목록에서 Observable을 올바르게 사용하는 방법은 무엇입니까?

모든 축을 올바르게 설정하는 데이터를 처음 플로팅 할 때 실행되는 matplotlib 함수의 이름은 무엇입니까?

스마트 계약 소유자를 얻기 위해 Golang을 사용하여 RPC 호출을 올바르게 보내는 방법은 무엇입니까?

사용자 입력과 일치 시키려고 할 때 목록에서 이중 단어 이름을 처리하는 방법은 무엇입니까?

Assert :: ExpectException을 올바르게 호출하는 방법은 무엇입니까?

Django에 URL을 올바르게 저장하는 방법은 무엇입니까?

복잡한 논리 조건을 올바르게 작성하는 방법은 무엇입니까?

JVM -XX : MaxRAM 옵션을 올바르게 사용할 수있는 방법은 무엇입니까?

복소수와 numpy를 다룰 때 파이썬에서 dtype을 올바르게 지정하는 방법은 무엇입니까?

셀 형식을 올바르게 만드는 방법은 무엇입니까?

async / await로 파일을 올바르게 읽는 방법은 무엇입니까?

AJAX 호출 후 JSON을 올바르게 얻는 방법은 무엇입니까?

pexpect를 통해 명령을 보낼 때 중복을 피하는 방법은 무엇입니까?

ExtJS 그리드 편집기에서 콤보 박스 값을 올바르게 설정하는 방법은 무엇입니까?

Excel에서이 중첩 IF 함수의 형식을 올바르게 지정하는 방법은 무엇입니까?

Google Cloud Run에서 실행되도록 Dockerfile을 올바르게 구성하는 방법은 무엇입니까?