목록에없는 요소 찾기
그래서 여기에 내 코드가 있습니다.
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
정수 목록을 포함합니다. 나는 통합 item
에 z
와에없는 번호 인쇄 z
에 비해을 item
.
z
비교했을 때에 있는 요소를 item
사용하여 시도하면 아무것도 인쇄 할 수 없습니다.
도움이 필요하세요?
귀하의 코드는 귀하가 생각하는 작업을 수행하지 않습니다. 줄 for item in z:
은의 단일 요소와 같게 z
만들 때 마다을 반복합니다 . 처음에는 처음부터 작업을 완료하기 전에 씁니다.item
z
item
나는 당신이 다음과 같은 것을 생각합니다.
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
경우 item
와 z
정렬 된 반복자는, 우리는에서 복잡성을 줄일 수 있습니다 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
'ProgramingTip' 카테고리의 다른 글
MotionEvent.ACTION_UP이 호출되지 않을 것입니다. (0) | 2020.12.02 |
---|---|
암호 입력을 위해 React Native에서 TextInput 스타일을 어떻게 지정합니까? (0) | 2020.12.02 |
AngularJS 필터를 사용하여 선행 0을 갖도록 숫자를 형식화 지불해야합니까? (0) | 2020.12.02 |
Android : 두 번 탭을 감지하는 방법? (0) | 2020.12.02 |
Windows 7에서 명령 프롬프트의 기본 시작 디렉터리 변경 (0) | 2020.12.02 |