对于给定的列表,如何使此搜索函数返回值而不是其生成器obj

2024-10-06 16:27:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个如下列表:

[['1', ' H ', ' Hydrogen', ' 1.00794(4)', 'FFFFFF', '1s1 ', '2.2', '37', '', '120', '1312', '-73', '-1, 1', 'gas', 'diatomic', '14', '20', '0.0000899', 'nonmetal', '1766'], ['2', ' He ', ' Helium', ' 4.002602(2)', 'D9FFFF', '1s2 ', '', '32', '', '140', '2372', '0', '', 'gas', 'atomic', '', '4', '0.0001785', 'noble gas', '1868'], etc...]

这一直贯穿元素周期表。我还有一个函数(在类中,因此是self),它应该打印一个子列表(每个元素一个子列表),如下所示:

def get_element_data(self, identifier):
    if type(identifier) == int:
        if self.check_atomic_number_exists(identifier):
            return self.parsed_data[identifier - 1]
    if type(identifier) == str:
        if len(identifier) <= 2:
            print("passed in symbol")
            return (element for element in self.parsed_data if identifier == 
                   element[1])
        if len(identifier) > 2:
            print("passed in name")
            return (element for element in self.parsed_data if identifier == 
                    element[2])

parsing_object.get_element_data("Hydrogen")

但如果我运行它,它将返回一个生成器对象,而不是子列表。如何使其返回子列表?而且,如果我按原子序数搜索,效果也不错


Tags: inself元素列表datagetreturnif
2条回答

您将返回以下内容: (element for element in self.parsed_data if identifier == element[2]) 这实际上是一个发电机。我对短python不太了解,因此我不确定是否完全理解您的代码,但我认为这就是您想要做的:

foreach(element in elements):
     if identifier == element[2]:
        return element

如果希望它像生成器一样运行,则不应使用return,而应使用yield。 这使您能够:

foreach(value in generator()):
  print value

所以对你来说是

foreach(element in elements):
     if identifier == element[2]:
        yield element

让它返回一个列表

return list(element for ...)

return [element for ...]

如果你需要的话,甚至是一个元组

return tuple(element for ...)

相关问题 更多 >