Python的简洁让我感到困惑

时间:2013-07-17 18:00:29

标签: python

我一直在关注Pandas: run length of NaN holes,特别是评论中的代码片段:

Series([len(list(g)) for k, g in groupby(a.isnull()) if k]) 

作为一个蟒蛇新手,我对简洁性印象深刻,但不确定如何阅读本文。是

这一点的缩写
myList = []
for k, g in groupby(a.isnull()) :
    if k:
        myList.append(len(list(g)))
Series(myList)

为了理解发生了什么,我试图解决它,但得到一个错误:

list object is not callable

那里运气不多。

如果有人能对此有所了解,那将是可爱的。

谢谢, 安

2 个答案:

答案 0 :(得分:5)

您的翻译正确无误。但是,您提供的代码无法运行,因为a是一个自由变量。

我的猜测是你收到了错误,因为你已经为名称list分配了一个列表对象。不要这样做,因为list是列表类型的全局名称。

此外,将来请始终提供完整的堆栈跟踪,而不仅仅是其中的一部分。还请提供足够的代码至少没有自由变量。

答案 1 :(得分:1)

如果这是您的所有代码,那么您只有几个可能性:

  1. myList.append实际上是一个列表
  2. len实际上是一个列表
  3. list实际上是一个列表
  4. isnull实际上是一个列表
  5. groupby实际上是一个列表
  6. Series实际上是一个列表
  7. 错误存在于groupby后面。
  8. 我要继续前进myList.append(因为除非您出于某种原因使用自己的groupby功能)和Series,否则这是不可能的。除非您从某个奇怪的地方导入Series,或者您正在重新分配变量,否则我们知道Series不能是列表。可以对a.isnull进行类似的论证。

    因此,我们有两种真正的可能性。您已经在脚本中的某个位置重新分配了一个不应该的列表,或者错误在groupby后面。

    我认为你使用了错误的groupby itertools.groupby take和数组或列表作为参数,groupby in pandas可能会将第一个参数计算为函数。我特别认为这是因为isnull() returns an array-like object