ProgramingTip

목록에없는 요소 찾기

bestdevel 2020. 12. 2. 21:41
반응형

목록에없는 요소 찾기


그래서 여기에 내 코드가 있습니다.

item = [0,1,2,3,4,5,6,7,8,9]
z = []  # list of integers

for item in z:
    if item not in z:
        print item

z정수 목록을 포함합니다. 나는 통합 itemz와에없는 번호 인쇄 z에 비해을 item.

z비교했을 때에 있는 요소를 item사용하여 시도하면 아무것도 인쇄 할 수 없습니다.

도움이 필요하세요?


귀하의 코드는 귀하가 생각하는 작업을 수행하지 않습니다. for item in z:은의 단일 요소와 같게 z만들 때 마다을 반복합니다 . 처음에는 처음부터 작업을 완료하기 전에 씁니다.itemzitem

나는 당신이 다음과 같은 것을 생각합니다.

item = [0,1,2,3,4,5,6,7,8,9]

for element in item:
    if element not in z:
        print element

그러나 다음과 같이 쉽게 할 수 있습니다.

[x for x in item if x not in z]

또는 (고유하지 않은 요소의 이더를 잃어도 괜찮다면) :

set(item) - set(z)

>> items = [1,2,3,4]
>> Z = [3,4,5,6]

>> print list(set(items)-set(Z))
[1, 2]

목록 이해력 사용 :

print [x for x in item if x not in Z]

또는 필터 기능 사용 :

filter(lambda x: x not in Z, item)

set어떤 형태로든 사용하면 검사중인 목록에 고유하지 않은 요소가 포함되어 있습니다. 예 :

print item

Out[39]: [0, 1, 1, 2, 3, 4, 5, 6, 7, 8, 9]

print Z

Out[40]: [3, 4, 5, 6]

set(item) - set(Z)

Out[41]: {0, 1, 2, 7, 8, 9}

위와 같이 목록 이해력 대

print [x for x in item if x not in Z]

Out[38]: [0, 1, 1, 2, 7, 8, 9]

또는 필터 기능 :

filter(lambda x: x not in Z, item)

Out[38]: [0, 1, 1, 2, 7, 8, 9]

list1 = [1,2,3,4]; list2 = [0,3,3,6]

print set(list2) - set(list1)

z에서 항목을 가져 오는 루프를 실행하는 경우 항목이 없을 경우 IMHO 다른 목록의 항목을 비교하는 것이 더 합리적입니다.


아니요, z는 정의되지 않습니다. 항목은 정수 목록을 포함합니다.

나는 당신이하려는 것이 생각합니다.

#z defined elsewhere
item = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

for i in item:
  if i not in z: print i

다른 답변에서 언급했듯이, 구경 할 수 있습니다.


>>> item = set([0,1,2,3,4,5,6,7,8,9])
>>> z = set([2,3,4])
>>> print item - z
set([0, 1, 5, 6, 7, 8, 9])

귀하의 코드는 작동하지 않습니다. 루프의 정의에 따르면 "item"은 Z에야합니다. Python의 "For ... in"루프는 "루핑 할 때마다 'z'라는 목록을 통해 루프를 반복합니다. 목록을 '항목'이라고합니다."

http://docs.python.org/tutorial/controlflow.html#for-statements

두 가지 다른 의미로 변수 이름 "item"을 두 번 사용한다는 사실에서 혼란이 발생한다고 생각합니다.


z를 반복하면서 z의 값에 항목을 다시 할당합니다. 따라서 for 루프에서 처음으로 항목 = 0, 다음 항목 = 1 등 ... 한 목록을 다른 목록과 비교하지 않습니다.

매우 명시 적으로 수행하려면 :

>>> item = [0,1,2,3,4,5,6,7,8,9]
>>> z = [0,1,2,3,4,5,6,7]
>>> 
>>> for elem in item:
...   if elem not in z:
...     print elem
... 
8
9

경우 itemz정렬 된 반복자는, 우리는에서 복잡성을 줄일 수 있습니다 O(n^2)O(n+m)이 작업을 수행하여

def iexclude(sorted_iterator, exclude_sorted_iterator):
    next_val = next(exclude_sorted_iterator)
    for item in sorted_iterator:
        try:
            while next_val < item:
                next_val = next(exclude_sorted_iterator)
                continue
            if item == next_val:
                continue
        except StopIteration:
            pass
        yield item

두 개가 반복자 인 경우 z( exclude_sorted_iterator)를 목록으로 저장하지 않는 메모리 사용량을 줄일 수있는 기회도 있습니다 .

참고 URL : https://stackoverflow.com/questions/2104305/finding-elements-not-in-a-list

반응형