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

时间:2017-11-03 23:06:49

标签: python list search sublist

我有一个如下所示的列表:

  

[[' 1',' H','氢气',' 1.00794(4)',' FFFFFF',' 1s1',' 2.2',' 37',&#39 ;',' 120',' 1312',' -73',' -1,1',' gas',' diatomic'' 14'' 20',' 0.0000899',' nonmetal' ,' 1766'],[' 2','他','氦气',' 4.002602(2)',' D9FFFF',' 1s2','',' 32',' ',' 140',' 2372',' 0','',' gas', ' atomic','',' 4',' 0.0001785','贵气“',' ; 1868']等......]

一直沿着元素周期表走。我还有一个函数(在一个类中,因此是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")

但如果我运行它,则返回生成器对象而不是子列表。如何让它返回子列表?此外,如果我按原子序数搜索它也能正常工作。

2 个答案:

答案 0 :(得分:1)

让它返回一个列表。

return list(element for ...)

...

return [element for ...]

如果那就是你所需要的,甚至是一个元组。

return tuple(element for ...)

答案 1 :(得分:0)

你要归还这个: (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