我有一个如下所示的列表:
[[' 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")
但如果我运行它,则返回生成器对象而不是子列表。如何让它返回子列表?此外,如果我按原子序数搜索它也能正常工作。
答案 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