0

我遇到了一个小逻辑问题并试图弄清楚。

我的情况如下:

我有一个项目列表,每个项目代表一个组

我需要创建一组嵌套组,

所以,例如:

myGroups = ["head", "neck", "arms", "legs"] 

我需要让它们像这样表示:(如果您可以对文件夹结构进行成像)

head 
  |_> neck 
        |_> arms 
              |_>legs 

依此类推,直到我击中最后一个元素。

我认为可行的(但不知道如何在这里推进)是:

def createVNTgroups(self, groupsData): 
    for i in range(len(groupsData)): 
        print groupsData[i] 
        for q in range(1, len(groupsData)): 
            print groupsData[q]

但在这种情况下,我正在运行与“q”一起使用的“i”中的相同元素。

有人可以给我一个提示吗?

提前致谢!

4

2 回答 2

0

那是你要找的吗?

>>> m
['head', 'neck', 'arms', 'legs']
>>> reduce(lambda x,y:[x,y][::-1] if x!=y else [x], m[::-1],m[-1])
['head', ['neck', ['arms', ['legs']]]]
于 2013-09-11T05:13:02.287 回答
0

如果我理解得很好,你想要一个嵌套结构。对于这种情况,您可以使用递归函数:

myGroups = ["head", "neck", "arms", "legs"] 

def createVNTgroups(alist):
    temp = alist[:]                 # needed because lists are mutable 
    first = [temp.pop(0)]           # extract first element from list
    if temp:                        # if the list still contains more items,
        second = [createVNTgroups(temp)]   # do it recursively
        return first + second       # returning the second object attached to the first.
    else:                           # Otherwise,
        return first                # return the last element


print createVNTgroups(myGroups)

这会产生一个嵌套列表:

['head', ['neck', ['arms', ['legs']]]]  
于 2013-09-10T22:40:13.660 回答