如果我做
a = [1, 2, 7]
a - a[-1]
我明白了TypeError: unsupported operand type(s) for -: 'list' and 'int'
但是,我有一个由 组成的列表b
,np.float64
并且以下代码有效:
type(b)
# list
b - b[-1]
# array([ 281.04209146, 6.57013103, 0. ])
我认为这是因为中的数字b
是np.float64
,并且b
在某种程度上被转换为np.array
,然后广播发生了。但我仍然发现这种行为令人惊讶:由于列表中的所有元素不需要具有相同的类型,如果b[0]
是字符串怎么办?中的操作数 b - b[-1]
仍然是list
and np.float64
,那么为什么b - b[-1]
不提高 aTypeError
呢?
编辑:有人回答说是不同的list
;np.array
嗯,我知道。但是b
没有np.array
. 它的行为就像一个,但它的类型是list
,就像我在代码片段中所说的那样。
这是一个最小的工作示例b
:
b
# [1598.717274996219, 1324.245314569733, 1317.6751835362861]
type(b[0])
# numpy.float64