两个方括号并排:奇怪的效果

时间:2017-02-24 13:03:39

标签: python python-3.x

我在一个竞争激烈的编程网站上,发现一个人写了这个奇怪的(对我来说)Python 3代码:

[r,"Nothing"][r==""]

如果'Nothing'是空字符串,则输出r

这怎么称呼它是什么意思?它看起来像一个三元运算符。

2 个答案:

答案 0 :(得分:5)

  

这怎么称呼它是什么意思?它看起来像一个三元运算符。

Python AFAIK中没有正式名称;实际上,这只是一种偷偷摸摸,错综复杂的索引列表方式。

如果"Nothing"r=="",您将选择True;如果rr == '',则会选择False;举个例子:

>>> [0, 1][True]
1
>>> [0, 1][False]
0

因为TrueFalse分别被解释为10,所以当您为列表编制索引时。

提供的代码段只定义了一个包含两个元素[r, "Nothing"]的临时列表,然后使用True/False与空字符串r进行比较的[r=='']结果对其进行索引。

不是最易读的代码,可能不是创建您不打算使用的列表的最佳主意;它可以很容易地用条件表达式代替:

"Nothing" if r == "" else r

更具可读性和更高效:

%timeit True if False else False
10000000 loops, best of 3: 32.9 ns per loop

%timeit [False, True][False]
10000000 loops, best of 3: 176 ns per loop

无需创建列表,也无需下标;只是条件和一些加载。

答案 1 :(得分:1)

它转换为:

if (r==""):
  'Nothing'
else:
  r
此上下文中的

False用作0,True用作1:

>>> [r,'Nothing'][False]
'foo'
>>> [r,'Nothing'][True]
'Nothing'

在其他语言中,它与'condition'?'if true':'if false'类似。它通常用在code golf中,你必须尽可能地生成最短的代码。