if if len(list)在Python中

mjs*_*rtz 2 python

我正在将Python代码翻译成C,以便利用HPC系统上可用的并行性(这是一个痛苦的过程)而且我遇到了Python中的条件,原来的程序员使用它让我感到困惑

   if rnum <> current_res:
      alim = 0
      if len(f): alim = f[-1]
Run Code Online (Sandbox Code Playgroud)

如果len(f)满足怎么办?我无法在网上找到以这种方式使用的这种约定.我想这是一个糟糕的编程习惯.

任何帮助将非常感激!

Mar*_*ers 15

在Python中,被视为"空"的值(例如数字0)在布尔上下文中被视为False,否则为True.

因此,len(f)如果f有长度则为True ,否则为空.如果f是标准的Python序列类型,那么代码可以简化为:

if f: alim = f[-1]
Run Code Online (Sandbox Code Playgroud)

因为这同样适用于序列; empty为False,长度非零意味着它为True.

有关所有重要细节,请参阅Python文档中的真值测试.

请注意,<>已弃用; 你应该真的用!=.

  • 当然,这取决于`f`是否是我创建的类,我重写__len__以返回4 ...它将不相同.但如果我这样做的话,我应该再用棍子打败. (2认同)

mgi*_*son 8

在大多数情况下if len(f):,与if f:... 相同

原因是因为如果f没有长度,它将返回0这是一个假值.实际上,真值测试实际上在某些情况下会检查对象(__len__)的长度.


ask*_*han 5

这个

if len(f)
Run Code Online (Sandbox Code Playgroud)

会翻译成:

if len(f) != 0
Run Code Online (Sandbox Code Playgroud)

或者在这种情况下,因为len(f)永远不会是负数,

if len(f) > 0
Run Code Online (Sandbox Code Playgroud)