从列表理解中调用本地方法失败

时间:2016-05-06 03:17:58

标签: python python-2.7 class list-comprehension

我正在尝试使用列表推导来调用本地方法作为限定符的一部分。由于某种原因,它似乎失败了,我不知道为什么。任何指导都将不胜感激。

列表理解:

pids = [item[2] for item in parsed if self.is_number(item[2])]

本地方法:

def is_number(s):
      try:
          float(s)
          return True
      except ValueError:
          return False

数据:

[['Group', 'Topic', 'Pid Offset', 'logSize', 'Lag', 'Owner'], ['group1', 'test', '0', '232820', '232820', '0', 'test_c5dbb5fe-065c-4d3b-9da5-ecbe1d4ff330'], ['group1', 'test', '1', '229936', '229936', '0', 'test_c5dbb5fe-065c-4d3b-9da5-ecbe1d4ff330'], ['group1', 'test', '2', '58317', '58317', '0', 'test_c5dbb5fe-065c-4d3b-9da5-ecbe1d4ff330']]

我知道这是一个完整的黑客攻击。我打算稍后清理它。但是,我希望看到它先运行。任何人都可以帮我弄清问题是什么?

2 个答案:

答案 0 :(得分:3)

这应该是"方法":

def is_number(s)

def is_number(self, s)

代替?

或者,也许,
理解中的召唤是:

is_number(item[2])

而不是

self.is_number(item[2])

在@Paul_Rooney建议中,静态方法可能是更好的选择:

pids = [item[2] for item in parsed if cls.is_number(item[2])]
# cls being the name of the class containing the static method called

@staticmethod
def is_number(s):
    ....

答案 1 :(得分:1)

以下代码:

def is_number(s):
      try:
          float(s)
          return True
      except ValueError:
          return False

parsed = [['group1', 'test', '2', '58317', '58317', '0', 'test_c5dbb5fe-065c-4d3b-9da5-ecbe1d4ff330']]
pids = [item[2] for item in parsed if is_number(item[2])]

print(pids)

给出:

['2']

OP很难知道这是否是预期的输出。