Logis and
di semua elemen di a_list
:
all(a_list)
Logis or
di semua elemen di a_list
:
any(a_list)
Jika Anda merasa kreatif, Anda juga dapat melakukan:
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)
perlu diingat bahwa itu tidak dievaluasi dalam korsleting, sementara built-in adalah ;-)
cara lucu lainnya:
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
dan satu lagi:
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
dan kita bisa terus sepanjang hari, tapi ya, cara pythonic adalah menggunakan all
dan any
:-)
Ngomong-ngomong, Python tidak memiliki eliminasi rekursi ekor, jadi jangan mencoba menerjemahkan kode LISP secara langsung ;-)
reduce()
dalamfunctools
sejak Python 3.0ANDing dan ORing itu mudah:
>>> some_list = [True] * 100 # OR >>> any(some_list) True #AND >>> all(some_list) True >>> some_list[0] = False >>> any(some_list) True >>> all(some_list) False
Mencatat juga cukup mudah:
>>> [not x for x in some_list] [True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
Tentu saja, bagaimana Anda akan menggunakan hasil tersebut mungkin memerlukan beberapa aplikasi menarik dari teorema DeMorgan.
sumber
all(not x for x in some_list)
(tapi itu sama dengannot any(some_list)
(ekspresi yang cukup alami, ya?)).Reduce bisa melakukan ini:
reduce(lambda a,b: a and b, alist, True)
Seperti yang disebutkan fortran, semua adalah cara paling ringkas untuk melakukannya. Tapi kurangi jawaban pertanyaan yang lebih umum "Bagaimana menerapkan operator logika ke semua elemen dalam daftar python?"
sumber
reduce
adafunctools.reduce
di Python 3, True
, jawaban ini akan menjadi satu-satunya jawaban yang benar-benar setara dengan kode pertanyaan, untuk daftar non-boolean.Idiom untuk operasi semacam itu adalah menggunakan
reduce
fungsi (global dengan Python 2.X, dalam modulfunctools
dengan Python 3.X) dengan operator biner yang sesuai baik yang diambil darioperator
modul atau dikodekan secara eksplisit. Dalam kasus Anda, ituoperator.and_
reduce(operator.and_, [True, True, False])
sumber
Berikut solusi lain:
def my_and(a_list): return not (False in a_list) def my_or(a_list): return True in a_list
ANDing semua elemen akan mengembalikan True jika semua elemen adalah True, maka tidak ada False dalam daftar. ORing serupa, tetapi harus mengembalikan True jika setidaknya satu nilai True ada dalam daftar.
sumber
Seperti yang ditunjukkan jawaban lain, ada banyak cara untuk menyelesaikan tugas ini. Berikut solusi lain yang menggunakan fungsi dari pustaka standar:
from functools import partial apply_and = all apply_or = any apply_not = partial(map, lambda x: not x) if __name__ == "__main__": ls = [True, True, False, True, False, True] print "Original: ", ls print "and: ", apply_and(ls) print "or: ", apply_or(ls) print "not: ", apply_not(ls)
sumber