본문 바로가기
파이썬

파이썬 목록의 모든 요소가 조건과 일치하는지 확인하는 방법은 무엇입니까?

by º기록 2021. 2. 16.
반응형

20000 개의 목록으로 구성된 목록이 있습니다. 각 목록의 세 번째 요소를 플래그로 사용합니다. 적어도 하나의 요소 플래그가 0 인 한이 목록에서 몇 가지 작업을 수행하고 싶습니다.

my_list = [["a", "b", 0], ["c", "d", 0], ["e", "f", 0], .....]

처음에는 모든 플래그가 0입니다. while 루프를 사용하여 하나 이상의 요소 플래그가 0인지 확인합니다.

def check(list_):
    for item in list_:
        if item[2] == 0:
            return True
    return False

check (my_list) True 를 반환하면 목록 작업을 계속합니다.

while check(my_list):
    for item in my_list:
        if condition:
            item[2] = 1
        else:
            do_sth()

사실, 나는 그것을 반복하면서 my_list에서 요소를 제거하고 싶었지만 그것을 반복하면서 항목을 제거 할 수 없습니다.

원래 my_list에는 플래그가 없습니다.

my_list = [["a", "b"], ["c", "d"], ["e", "f"], .....]

반복 할 때 요소를 제거 할 수 없기 때문에 이러한 플래그를 발명했습니다. 그러나 my_list 에는 많은 항목이 포함되어 있으며 while 루프는 각 for 루프에서 모든 항목을 읽고 많은 시간을 소비합니다! 의견 있으십니까?

 

해결 방법

 


>>> items = [[1, 2, 0], [1, 2, 0], [1, 2, 0]]
>>> all(flag == 0 for (_, _, flag) in items)
True
>>> items = [[1, 2, 0], [1, 2, 1], [1, 2, 0]]
>>> all(flag == 0 for (_, _, flag) in items)
False

all (flag == 0 for (_, _, flag) in items) all (item [2] == 0 for item in items) ,이 경우 읽기가 조금 더 좋습니다.

그리고 필터 예제의 경우 목록 이해도 (물론 적절한 경우 생성기 표현식을 사용할 수 있습니다) :

>>> [x for x in items if x[2] == 0]
[[1, 2, 0], [1, 2, 0]]


>>> any(flag == 0 for (_, _, flag) in items)
True

 

참조 페이지 https://stackoverflow.com/questions/10666163

 

 

반응형

댓글