我有一个列表r
和一个列表l
r = get_r()
l = [['a', 'b'], ['a'], ['c']]
print('-')
[print(type(el)) for el in l];
print('-')
[print(type(el)) for el in r];
会给我们
-
<class 'list'>
<class 'list'>
<class 'list'>
-
<class 'list'>
<class 'list'>
<class 'list'>
让我们打印r
和l
print(l)
print(r)
会给我们
[['a', 'b'], ['a'], ['c']]
[['Schadenersatzrecht'], ['Abgabenrecht, Finanzrecht und Steuerrecht; Verfahrensrecht'], ['Europarecht']]
但现在我np.sum
列出了这些名单:
np.sum(l)
np.sum(r)
我明白了:
['a', 'b', 'a', 'c']
但也是:
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-158-0d0bce575128> in <module>()
----> 1 np.sum(r)
~/miniconda3/lib/python3.6/site-packages/numpy/core/fromnumeric.py in sum(a, axis, dtype, out, keepdims)
1832 return sum(axis=axis, dtype=dtype, out=out, **kwargs)
1833 return _methods._sum(a, axis=axis, dtype=dtype,
-> 1834 out=out, **kwargs)
1835
1836
~/miniconda3/lib/python3.6/site-packages/numpy/core/_methods.py in _sum(a, axis, dtype, out, keepdims)
30
31 def _sum(a, axis=None, dtype=None, out=None, keepdims=False):
---> 32 return umr_sum(a, axis, dtype, out, keepdims)
33
34 def _prod(a, axis=None, dtype=None, out=None, keepdims=False):
TypeError: cannot perform reduce with flexible type
我完全不明白问题所在。即使在这些列表[print(type(el[0])) for el in r];
中打印元素列表中的类型,也会给我<class 'str'>
。这些类型是相同的 - 至少从我所知道的np.sum
将无法在r
上运行。
我不确定是否可以通过此处的内容了解问题所在。我可以提供的唯一信息是r
来自解析的JSON - 但是,我不明白为什么这会影响结果。
答案 0 :(得分:2)
使用np.sum
展平您的列表是一个坏主意。在执行np.sum
之前,两个列表都被强制转换为np数组类型,这些类型具有不同的dtypes(尽管这有点失败的原因)。
np.array(l).dtype != np.array(r).dtype
您通常不希望使用np.sum
。
使用列表推导简单地使用Pythonic方式列出列表列表:
l = [x for lst in l for x in lst]
r = [x for lst in r for x in lst]