首页 > 解决方案 > Python:将“”分配给列表切片的行为的基本原理

问题描述

我通常使用在许多情况下自动广播的 numpy,并且对使用基本 python 中的列表的类似代码的行为感到困惑。

麻木案例

aa = np.zeros((10)).astype('U')
aa[0:5] = ''
aa
# array(['', '', '', '', '', '0.0', '0.0', '0.0', '0.0', '0.0'], dtype='<U32')

我在基础 Python 中的绊脚石

bb = ['0.0']*10
bb[0:5] = ''
bb
# ['0.0', '0.0', '0.0', '0.0', '0.0']

注意:它会缩短列表!
我应该做的

cc = ['0.0']*10
cc[0:5] = ['']*5
cc
# ['', '', '', '', '', '0.0', '0.0', '0.0', '0.0', '0.0']

我得到那个列表不广播东西,而是按元素做事。保持一致可能很好。但为什么不bb[0:5] = ''只是抛出一个错误? bb[0:5] = None会有一些意义,但这反而引发 TypeError。

bb[0:5] = ''用文字描述的内容类似于“用空字符串替换此列表的前半部分”。但是用字符串替换列表的一部分是没有意义的。它们是不同的类型。 type('')返回<class 'str'>

有人可以告诉我为什么要这样实施吗?必须是一个很好的理由,我不明白。

标签: python

解决方案


推荐阅读