python if变量语句语法

时间:2017-05-18 22:38:55

标签: python

我遇到了一些我从未见过的python代码语法。这是一个例子:

i = 0
for spam in range(10):
    i += [1, 3][i > 5]
    print(i)

结果是1,2,3,4,5,6,9,12,15,18的序列。因此,它增加1直到i > 5,然后增加3。

以前,我会把这句话写成:

if i > 5:
    i += 3
else:
    i += 1

那么这一行是什么:i += [1, 3][i > 5]

  • 你怎么称呼这种语法结构?
  • 它是某种形式的列表理解还是完全不同的东西?

语法很有趣,我想更多地了解它,但不知道在哪里看。

编辑: 谢谢Darkstarone。我从未想过使用表达式来返回列表索引。那很酷。这意味着您还可以执行以下操作:spam = ["Even", "Odd"][eggs % 2]返回偶数或奇数字符串,或foo = ["A", "B", "C"][zot % 3]在循环遍历zot值时循环选择三个选项。

可能不会养成使用此构造的习惯,因为其他表达式更容易理解。但是,我会把这个放在那个完美情况的技巧中。

2 个答案:

答案 0 :(得分:3)

所以我认为这里发生的是列表([1,3])可以是:

[1,3][0] # 1

[1,3][1] # 3

它利用0 == False1 == True这一事实。虽然有点不透明,但它相当整洁。我可能会这样写:

i = 0
for _ in range(10):
    i += 3 if i > 5 else 1
    print(i)

答案 1 :(得分:0)

三元运算符,如下所示:

i += 3 if i > 5 else 1