첫째, 단지 그것의 부작용에 대한 지능형리스트를 사용하여 나쁜 방법입니다. 이미 내장 목록에 의해 촬영 때문에 변수 이름으로 list
을 사용하지 않는, 또한
lst = [x for x in lst if x <= 2]
사용해야합니다. 셋째, 돌연변이를 일으키면서 목록을 반복하고 있기 때문에 접근법이 작동하지 않습니다. 당신이 볼 수 있듯이
# python interpreter
>>> lst = [1,2,3,4]
>>> for item in lst:
... print(item)
... if item > 2:
... lst.remove(item)
... print(lst)
...
1
[1, 2, 3, 4]
2
[1, 2, 3, 4]
3
[1, 2, 4]
이 item
는 4
결코 :
여기에 당신의 접근 방식에 무슨 일이 일어나고 있는지의 데모입니다. 두 번째 질문에 대해서는
은 : 항목이 listB
에있는 경우
또한
, 난 할 노력하고있어 listA
에서 항목을 제거합니다. 목록 이해력으로 어떻게이 작업을 수행 할 수 있습니까? 세 번째 질문에 대해서는
bset = set(listB)
listA = [x for x in listA if x not in bset]
:
이
>>> list1=['prefix1hello', 'foo', 'prefix2hello', 'hello']
>>> prefixes=['prefix1', 'prefix2']
>>> [x for x in list1 if not any(x.startswith(prefix) for prefix in prefixes)]
['foo', 'hello']
이제 새로운 질문을 추가하는 중지하십시오, 당신은, 덕분에 다른 문제에 대한 새로운 질문을 열 수 있습니다.
개체를 반복 할 때 개체의 요소를 삭제하면 색인이 이동하여 다음 값을 건너 뜁니다. 그래서 여기서 결코 평가받지 않습니다. 따라서 루프 전에 사본을 만든 다음 객체를 교체하는 것이 중요합니다. – Llopis
어쨌든'items'은 무엇입니까? – vaultah
가능한 복제본 [Python으로 반복하면서 목록에서 항목 제거] (http://stackoverflow.com/questions/1207406/remove-items-from-a-list-while-iter-iterating-in-python) –