我遇到了一些代码,类似于
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]
这仅对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]
得到改变。
为什么会这样?
比较的规则是:
当您对两个字符串或两个数字类型进行排序时,将以预期的方式进行排序(字符串的字典顺序,整数的数字顺序)。
订购数字类型和非数字类型时,数字类型优先。
当您订购两个都不兼容的类型(其中两个都不是数字)时,将按其类型名的字母顺序对其进行排序:
因此,我们有以下顺序
数字<列表<字符串<元组
有关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] 删除。
我来说两句