x [x <2] = 0在Python中是什么意思?

琥珀色:

我遇到了一些代码,类似于

x[x<2]=0

玩弄各种变化,我仍然坚持使用此语法。

例子:

>>> x = [1,2,3,4,5]
>>> x[x<2]
1
>>> x[x<3]
1
>>> x[x>2]
2
>>> x[x<2]=0
>>> x
[0, 2, 3, 4, 5]
trans1st0r:

这仅对NumPy数组有意义列表的行为是无用的,并且特定于Python 2(不是Python 3)。您可能需要仔细检查原始对象是否确实是NumPy数组(请参见下文)而不是列表。

但是在这里的代码中,x是一个简单的列表。

以来

x < 2

是False,即0,因此

x[x<2]x[0]

x[0] 被改变。

相反,x[x>2]x[True]x[1]

因此,x[1]得到改变。

为什么会这样?

比较的规则是:

  1. 当您对两个字符串或两个数字类型进行排序时,将以预期的方式进行排序(字符串的字典顺序,整数的数字顺序)。

  2. 订购数字类型和非数字类型时,数字类型优先。

  3. 当您订购两个都不兼容的类型(其中两个都不是数字)时,将按其类型名的字母顺序对其进行排序:

因此,我们有以下顺序

数字<列表<字符串<元组

有关Python如何比较字符串和整数的信息,请参见公认的答案

如果x是NumPy数组,则由于布尔数组索引,该语法更有意义在这种情况下,x < 2根本不是布尔值;它是一个布尔数组,表示的每个元素是否x小于2。x[x < 2] = 0然后选择小于2 的元素x并将这些单元格设置为0。请参见Indexing

>>> x = np.array([1., -1., -2., 3])
>>> x < 0
array([False,  True,  True, False], dtype=bool)
>>> x[x < 0] += 20   # All elements < 0 get increased by 20
>>> x
array([  1.,  19.,  18.,   3.]) # Only elements < 0 are affected

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章