Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/354.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 通过生成器方法从列表中顺序提取一项_Python - Fatal编程技术网

Python 通过生成器方法从列表中顺序提取一项

Python 通过生成器方法从列表中顺序提取一项,python,Python,下面是我的获取所有代理方法,该方法被认为可以一次性提供所有代理坐标: def fetch_all_agents(number_of_agents = None): agentList = [] agentConfig = configparser.ConfigParser() agentConfig.readfp(open(r'SwarmSimulator\configFile.txt')) random_option = agentConfig.get('A

下面是我的
获取所有代理
方法,该方法被认为可以一次性提供所有代理坐标:

def fetch_all_agents(number_of_agents = None):

    agentList = []
    agentConfig = configparser.ConfigParser()

    agentConfig.readfp(open(r'SwarmSimulator\configFile.txt'))
    random_option = agentConfig.get('Agent Generation', "random_option")

    if(random_option == "True"):
        agentList = agentObj.generate_agents(number_of_agents)
    elif(random_option == "False"):
        with open(r"SwarmSimulator\agentListFile.txt") as f:

            tempList = [list(ast.literal_eval(line)) for line in f]

        pointObj = Point.Point()

        for innerList in tempList:
            pointObj.x = innerList[0]
            pointObj.y = innerList[1]

            agentObj = Agent.Agent(pointObj)

            agentList.append(agentObj)
    return agentList
我将计划另一种方法,我们将其命名为
fetch\u single\u agent
,从列表中读取一个代理,即右代理在最后一个获取的代理旁边持有的代理。为了达到这个目标,考虑发电机是合理的


请您指导我为上述方法实现一个生成器驱动的版本,在这个版本中,正如我所解释的,可以按顺序从列表中获取代理吗?

只需
生成
代理

   for innerList in tempList:
        pointObj.x = innerList[0]
        pointObj.y = innerList[1]
        agentObj = Agent.Agent(pointObj)
        yield agentObj

agent_gen = fetch_all_agents(5)

for agent in agent_gen:  
   print(agent)
或者使用“下一步”获取一个代理:

 agent_gen = fetch_all_agents(5)
 ag_1 = next(agent_gen)

非常感谢。但是,我是否应该检查任何情况,在这种情况下,列表已经完全迭代,并且没有更多的代理要获取?…@Ordenador。当您迭代了
templast
之后,将不会再有
agentObj的
了。让步意味着您可以一次迭代获取代理,而不是创建完整的列表