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

Fed*_*nzi 3 python python-3.x

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

[r,"Nothing"][r==""]
Run Code Online (Sandbox Code Playgroud)

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

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

Jim*_*ard 5

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

Python AFAIK中没有正式名称; 真的,它只是一种偷偷摸摸,错综复杂的索引列表方式.

你会选择"Nothing",如果r==""Truer,如果r == ''False; 举个例子:

>>> [0, 1][True]
1
>>> [0, 1][False]
0
Run Code Online (Sandbox Code Playgroud)

因为True和索引列表时分别False被解释为10.

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

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

"Nothing" if r == "" else r
Run Code Online (Sandbox Code Playgroud)

更具可读性和更高效:

%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
Run Code Online (Sandbox Code Playgroud)

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