我正在尝试使用列表推导来调用本地方法作为限定符的一部分。由于某种原因,它似乎失败了,我不知道为什么。任何指导都将不胜感激。
列表理解:
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']]
我知道这是一个完整的黑客攻击。我打算稍后清理它。但是,我希望看到它先运行。任何人都可以帮我弄清问题是什么?
答案 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很难知道这是否是预期的输出。