Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 两个方括号并排:奇怪的效果_Python_Python 3.x - Fatal编程技术网

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

Python 两个方括号并排:奇怪的效果,python,python-3.x,Python,Python 3.x,我在一个竞争激烈的编程网站上,发现一个人写了(对我来说)这个奇怪的Python 3代码: [r,"Nothing"][r==""] 如果r为空字符串,则输出'Nothing' 这叫什么名字?它是什么意思?它看起来像一个三元运算符 这叫什么名字?它是什么意思?它看起来像一个三元运算符 在Python AFAIK中没有它的正式名称;实际上,这只是一种为列表编制索引的狡猾、复杂的方法 如果r==“code>为True则选择“无”,如果r==“code>为False,则选择r;例如: >>

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

[r,"Nothing"][r==""]
如果
r
为空字符串,则输出
'Nothing'

这叫什么名字?它是什么意思?它看起来像一个三元运算符

这叫什么名字?它是什么意思?它看起来像一个三元运算符

在Python AFAIK中没有它的正式名称;实际上,这只是一种为列表编制索引的狡猾、复杂的方法

如果
r==“code>为
True
则选择
“无”
,如果
r==“code>为
False
,则选择
r
;例如:

>>> [0, 1][True]
1
>>> [0, 1][False]
0
因为在索引列表时,
True
False
分别被解释为
1
0

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

不是最可读的代码,也可能不是创建一个您不打算使用的列表的最佳方法;可以很容易地用条件表达式替换:

"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
无需创建列表,也无需为其下标;只是一个条件和一些加载。

它转换为:

if (r==""):
  'Nothing'
else:
  r
在此上下文中,
False
用作0,
True
用作1:

>>> [r,'Nothing'][False]
'foo'
>>> [r,'Nothing'][True]
'Nothing'
它是一个单行程序,类似于其他语言中的“条件”?“如果为真”:“如果为假”
。它通常用于需要生成尽可能短的代码的地方