2012-05-30 74 views
0

给定一个列表n长,如['animal', 'dog', 'golden retriever']['food', 'dinner', 'pasta', 'white sauce', 'fetucci alfredo'],我需要遍历数组并获取当前索引,加上每个以前的索引。Python:循环遍历一个列表使用所有索引与每个索引

是否有过什么好办法循环,做到这一点,使得任意长度的列表仍然可以变成:

stuff['food'] 
stuff['food']['dinner'] 
stuff['food']['dinner']['pasta'] 
stuff['food']['dinner']['pasta']['white sauce'] 
stuff['food']['dinner']['pasta']['white sauce']['fetucci alfredo'] 

我越来越深的移动到一个对象,但每个值可能可能还不存在,所以我需要在每个级别停下来。即stuff['food']['dinner']可能存在,但我可能仍然需要添加意大利面到晚餐,白酱到意大利面等。

+0

我是否正确地假设您想要以特定的严格等级方式关联数据?如果是这样,仅仅依次引用列表元素可能并不理想;字典数据类型可能是你需要的。这将允许您将嵌套字典关联:例如,将意大利面食品列表作为与食品类别关联的一个项目。 – abought

+0

是的,非常正确。由于触发此代码的API如何定义结构,我必须使用列表。我还必须在访问器中定义整个层次结构;我写的以前的版本确实只使用了父母/孩子(例如,意大利面食列表作为与食品类别相关的一个项目),但如果您有多个相同项目名称/不同项目对父/子:例如[人,史密斯,史蒂夫,艾伦]和[姓名,S名,史密斯,史蒂夫] – BrianFreud

回答

5

这是什么?

>>> lst = ['food', 'dinner', 'pasta', 'white sauce', 'fetucci alfredo'] 
>>> for i in range(len(lst)): 
... print lst[:i+1] 
... 
['food'] 
['food', 'dinner'] 
['food', 'dinner', 'pasta'] 
['food', 'dinner', 'pasta', 'white sauce'] 
['food', 'dinner', 'pasta', 'white sauce', 'fetucci alfredo'] 

因此,在每个循环的“台阶”,lst[:i+1]是你的“当前指数与以前所有的指数”,你可以做任何你想用它。

例如,你可以用它来索引到一些深度嵌套层次字典:

d = mydict 
for index in lst[:i+1]: 
    d = d[index] 
+0

谢谢,我认为这可以做到这一点:) – BrianFreud

+0

你也可以使用拼写'为我在范围内(1,len (lst)+1:'或'for i,_ in enumerate(lst,1):',这样就不需要在循环内部执行fencepost运算了 – lvc

+0

再次感谢,这确实解决了它。 。:) – BrianFreud

0

我觉得它像一个树数据结构

test = ['animal', 'dog', 'golden retriever'] 
tree = {} 
subtree = tree 
for x in test: 
    subtree = subtree.setdefault(x, {}) 

tree{'animal': {'dog': {'golden retriever': {}}}}

祝你好运!

相关问题