본문 바로가기
파이썬

파이썬 목록의 모든 요소에 논리 연산자를 적용하는 방법

by º기록 2021. 1. 12.
반응형

파이썬에 부울 목록이 있습니다. 나는 그들을 AND (또는 OR 또는 NOT)하고 결과를 얻고 싶습니다. 다음 코드는 작동하지만 그다지 파이썬 적이지는 않습니다.

def apply_and(alist):
 if len(alist) > 1:
     return alist[0] and apply_and(alist[1:])
 else:
     return alist[0]

그것을 더 비단뱀처럼 만드는 방법에 대한 제안.

 

해결 방법

 

a_list 의 모든 요소에 대한 논리적 and :

all(a_list)

a_list 의 모든 요소에 대한 논리적 또는 :

any(a_list)

창의적이라고 생각되면 다음을 수행 할 수도 있습니다.

import operator
def my_all(a_list):
  return reduce(operator.and_, a_list, True)

def my_any(a_list):
  return reduce(operator.or_, a_list, False)

내장은 ;-) 동안 그것들은 단락으로 평가되지 않는다는 것을 명심하십시오.

또 다른 재미있는 방법 :

def my_all_v2(a_list):
  return len(filter(None,a_list)) == len(a_list)

def my_any_v2(a_list):
  return len(filter(None,a_list)) > 0

그리고 또 다른 :

def my_all_v3(a_list):
  for i in a_list:
    if not i:
      return False
  return True

def my_any_v3(a_list):
  for i in a_list:
    if i:
      return True
  return False

그리고 우리는 하루 종일 갈 수 있지만, 예, 파이썬적인 방법은 all any 를 사용하는 것입니다 :-)

그건 그렇고, 파이썬에는 꼬리 재귀 제거 기능이 없으므로 LISP 코드를 직접 번역하지 마십시오 ;-)

 

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

 

 

반응형

댓글