To pytanie jest dla zabawy; Nie oczekuję, że odpowiedź będzie przydatna.Czy istnieje wbudowana funkcja "i" i/lub "lub" w języku Python?
Kiedy widzę ludzi robiących rzeczy z reduce()
w Pythonie, często korzystają z wbudowanej funkcji w Pythonie, często z modułu operator
.
to działa:
result = reduce(lambda a, b: a + b, range(5))
Ale zazwyczaj można zobaczyć poniżej:
from operator import add
result = reduce(add, range(5))
Co jest dla mnie dziwne jest to, że moduł operator
nie wydaje się mieć funkcję logiczną and
. Ma on bitowy i, ale nie jest logiczny and
.
Więc załóżmy, robisz to:
result = reduce(lambda a, b: a and b, range(1, 6))
Czy istnieje wbudowana funkcja, która może być używana tutaj?
Zastanawiam się również, czy istnieje wbudowana funkcja, która może zastąpić or
.
Jeśli map argumenty do wartości logiczne pierwsze, można użyć bitowego iz operator
, lub po prostu korzystać bezpośrednio bool.__and__
, tak:
from operator import and_
result = reduce(and_, map(bool, range(1, 6)))
result = reduce(bool.__and__, map(bool, range(1, 6)))
i podobnie z operator.or_()
lub bool.__or__
dla funkcjonowania or
. Ale szukam funkcji, która nie potrzebuje wartości odwzorowanych na Booleans.
Jeśli wiedziałeś na pewno, że twoje wartości są liczbami całkowitymi, możesz użyć operator.mul
dla and
i operator.add
dla or
. Byłoby to surowe włamanie i nie chcę tej odpowiedzi ... szczególnie biorąc pod uwagę, jak drogie byłyby mnożenia, gdyby napotkano wiele liczb i żadna z nich nie była zerowa!
Uwaga: jestem świadomy all()
i any()
, które są lepszymi zamiennikami do tego zastosowania reduce()
. Jak powiedziałem na górze, proszę o to dla zabawy.
Uwaga: Funkcja, która ma efekt uboczny wymuszenia wszystkich wartości na bool
, byłaby akceptowalną odpowiedzią. Wbudowany and
Hasło nie to zrobić:
x = 3 and 5 # sets x to 5, not to True
Jednak dla celów niniejszego pytanie Jestem zainteresowany tylko w funkcji, która może pracować z reduce()
zrobić logiczne and
lub or
operacje.
można użyć 'dowolny ((a, b)) 'dla' a lub b' i 'all ((a, b)) dla' a i b'. Oczywiście, musisz tworzyć krotki i nie ma żadnych zwarć ... – kindall
'x = 3 i 5' ustawia' x' na '5', ale możesz też przesłać go do boolowskiej, więc dlaczego nie używasz tego? Chodzi o to, że niezależnie od wyrażenia logicznego, które próbujesz ocenić 'x' w, będzie interpretowane jako boolean. – whatyouhide
@steveha ładne pytanie. Mam nadzieję, że dostaniesz odpowiedź, ale wygląda na to, że przeszedłeś każdą alternatywę już w swojej odpowiedzi – jamylak