【问题标题】:How do we use 'and' operator in array indexing? [duplicate]我们如何在数组索引中使用“和”运算符? [复制]
【发布时间】:2019-04-03 06:33:53
【问题描述】:

我发现一个代码使用了A[i][j] += min(A[i - 1][j and j - 1:j + 2]) 我尝试了类似的实现,如下所示,这给了我意想不到的结果。有人可以解释一下吗?我无法理解在这种情况下如何解释“和”。

a = [1,2,3,4,5,6,7,8,9,10,11,12]

print(a[0 and 3:4]) #[1, 2, 3, 4]

print(a[1 and 3:4]) #[4]

print(a[1 and 3:6]) #[4, 5, 6] 

print(a[0 and 3:6]) #[1, 2, 3, 4, 5, 6]

print(a[2 and 3:6]) #[4, 5, 6]

编辑:在 a[0 and 3:4] 中,它包括从 0 到 3 的元素,但是如果我使用 a[1 and 3:4] 它只给出第三个元素,而我期望从 1 到 3 的元素

【问题讨论】:

  • 意外结果是什么意思?
  • 已编辑。请检查
  • 0 and 30 因为 0 是假的。 1 and 33 因为 1 是真实的。查看欺骗目标。
  • 有趣的事实:如果你不知道: True 也是一个整数,即 1 。 bool inherits int。但要小心this

标签: python arrays python-3.x indexing iteration


【解决方案1】:

在您的情况下,您只是通过“和”比较整数值 - 而不是索引值后面的值。如果你将任何东西与 0 进行比较,你会得到 0。在所有其他情况下,你会得到第二个整数的值(也许不是每个 python 解释器)。

【讨论】:

    【解决方案2】:

    AND 的优先级高于切片 : 运算符。

    你的表达方式是,

    a[0 and 3:4] --> a[(0 and 3):4] --> a[0:4] --> [1, 2, 3, 4]
    

    【讨论】:

    • 是的,我现在明白了。但是如果两个非零整数之间出现“和”呢?
    • 非零整数是非假值,因此在两个非零值之间,将使用第二个。 -1 and -5 --> -5
    • 哦,谢谢。消除所有困惑。
    • @KaranShah 现在你知道它是如何工作的,永远不要这样使用它 ;-)
    • 呵呵,不过很好玩 XD @jarmod
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-07-15
    • 2020-07-21
    • 1970-01-01
    • 2010-12-30
    • 1970-01-01
    • 2019-08-24
    • 2019-08-16
    相关资源
    最近更新 更多