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

问题:

我遇到一些类似于一行的代码

x[x<2&#93;=0
&#91;/code&#93;
玩弄变化,我仍然坚持这个语法。
例子:
&#91;code lang="python"&#93;
>>> x = [1,2,3,4,5]
>>> x[x<2&#93;
1
>>> x[x<3&#93;
1
>>> x[x>2]
2
>>> x[x<2&#93;=0
>>> x
[0, 2, 3, 4, 5]

回答:

这只适用于。列表的行为是无用的,特定于Python 2(而不是Python 3)。您可能需要仔细检查原始对象是否确实是NumPy数组(请参见下文),而不是列表。
但是在你的代码中,x是一个简单的列表。
以来

x < 2 [/code] 是假的 即0  x[x<2]x[0]
 x[0]已更改。
相反,x[x>2]x[True]x[1]
所以,x[1]变更。
 为什么会这样呢?
比较规则是:

  1. 当您订购两个字符串或两个数字类型时,排序按预期的方式完成(字符串的字典排序,整数的数字排序)。
  2. 当您订购数字和非数字类型时,数字类型首先出现。
  3. 当您订购两个不兼容的类型时,它们都不是数字,它们按照它们的类型名称的字母顺序排序:

所以,我们有如下的顺序
数字How does Python compare string and int?的公认答案
 如果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 [/code]     Code问答: http://codewenda.com/topics/python/
Stackoverflow: What does x[x < 2] = 0 mean in Python?

*转载请注明本文链接以及stackoverflow的英文链接

发表评论

电子邮件地址不会被公开。 必填项已用*标注

11 − = 6