我正在尝试使用 python 执行以下操作,但出现了奇怪的行为。假设我有以下列表:
x = [5, 4, 3, 2, 1]
现在,我正在做类似的事情:
x[x >= 3] = 3
这给出:
x = [5, 3, 3, 2, 1]
为什么只有第二个元素发生变化?我期待着:
[3, 3, 3, 2, 1]
因为Python会评估x>=3
as True
自从True
等于 1 所以第二个元素x
将转换为 3。
为此,您需要使用列表理解:
>>> [3 if i >=3 else i for i in x]
[3, 3, 3, 2, 1]
如果你想知道为什么x >= 3
评估为 True,请参阅以下内容文档 :
CPython实现细节:除数字之外的不同类型的对象按其类型名称排序;不支持正确比较的相同类型的对象按其地址排序。
当然,在 python-2.x 和 CPython 实现中,列表总是大于整数类型。正如字符串大于列表一样:
>>> ''>[]
True
然而,在 Python-3.X 中,你不能将不可排序的类型放在一起比较,你会得到一个TypeError
结果。
In [17]: '' > []
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-17-052e7eb2f6e9> in <module>()
----> 1 '' > []
TypeError: unorderable types: str() > list()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)