是什么解释了列表上的布尔运算和按位运算与 NumPy 数组在行为上的不同呢?
我对在 Python 中正确使用 &
和 and
感到困惑,如下面的示例所示。
mylist1 = [True, True, True, False, True]
mylist2 = [False, True, False, True, False]
>>> len(mylist1) == len(mylist2)
True
# ---- Example 1 ----
>>> mylist1 and mylist2
[False, True, False, True, False]
# I would have expected [False, True, False, False, False]
# ---- Example 2 ----
>>> mylist1 & mylist2
TypeError: unsupported operand type(s) for &: 'list' and 'list'
# Why not just like example 1?
>>> import numpy as np
# ---- Example 3 ----
>>> np.array(mylist1) and np.array(mylist2)
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
# Why not just like Example 4?
# ---- Example 4 ----
>>> np.array(mylist1) & np.array(mylist2)
array([False, True, False, False, False], dtype=bool)
# This is the output I was expecting!
这个回答 和 这个答案帮助我理解了 and
是一个布尔运算,而 &
是一个位操作运算。
为了更好地理解这个概念,我阅读了关于 按位运算的文章,但是我正在努力使用这些信息来理解我上面的4个例子。
示例4引导我得到了我想要的输出,所以这很好,但是我仍然对何时/如何/为什么应该使用 and
和 &
感到困惑。为什么列表和 NumPy 数组与这些运算符的行为不同?
有人能帮我理解布尔运算和按位运算之间的区别,解释一下为什么它们处理列表和 NumPy 数组的方式不同吗?