Python中的if len(list)

Python中的if len(list),python,Python,我正在将Python代码翻译成C,以便利用HPC系统上可用的并行性(这是一个痛苦的过程),我在Python中遇到了一个原始程序员使用的条件,这让我感到困惑 if rnum <> current_res: alim = 0 if len(f): alim = f[-1] 如果rnum当前值: 阿利姆=0 如果len(f):alim=f[-1] 如果len(f)满足怎么办?我在网上的任何地方都找不到这种惯例。我认为这是一种糟糕的编程实践 任何帮助都将不胜

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

   if rnum <> current_res:
      alim = 0
      if len(f): alim = f[-1]
如果rnum当前值:
阿利姆=0
如果len(f):alim=f[-1]
如果len(f)满足怎么办?我在网上的任何地方都找不到这种惯例。我认为这是一种糟糕的编程实践


任何帮助都将不胜感激

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

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

if f: alim = f[-1]
因为这同样适用于序列;empty为False,长度非零表示为True

有关所有重要的详细信息,请参见Python文档中的

请注意,
已被弃用;你真的应该使用
=
相反。

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

原因是如果
f
没有长度,它将返回
0
,这是一个错误的值。事实上,真值测试实际上是检查一个对象的长度(
\uu len\uuu

if len(f)
将转化为:

if len(f) != 0
或者在这种情况下,因为
len(f)
从不为负

if len(f) > 0

早就被弃用了。使用
=相反。严格来说,只有
!=0
,但由于不能有负长度序列,因此它在功能上不相关。@sr2222,我已经澄清了答案。它们在这里是等价的,因为示例是
len
,我之所以包含它,是因为
len>0
可读性更强。@sr2222--但是你能给其他对象一个负长度吗?文档说结果应该是一个
整数>=0
,但我不知道这意味着它是强制的或只是预期的…-0。如果f:
@mgilson-heh,python习语应该是
,在意想不到的情况下,我认为
len>0
是最好的选择:可以安全地假设
len(f)
f
具有相同的真值吗?当然,这取决于
f
@Awalias:如果它是一个自定义序列类型,那么做出这样的假设是不安全的。@Awalias——如果
f
实现了一个自定义的
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu非零
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu,如果
f
是我创建的类,我重写len以返回4。。。这将是不一样的。但是,如果我这样做了,我也会被棍子打。@pcalcao——如果你没有用
\uuuu nonzero\uuuuu
做任何事情,情况也会一样。