Работа со списками - Python

Я столкнулся с небольшой логической проблемой и попытался понять ее.

мой случай таков:

У меня есть список элементов, каждый элемент представляет группу

Мне нужно создать набор вложенных групп,

так, например:

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]

но в этом случае я выполняю те же элементы в 'i', что я уже взял с помощью q.

мог ли кто-нибудь дать мне подсказку?

заранее спасибо!

2 ответа

Это то, что вы искали?

>>> 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']]]]


Если я хорошо понял, вам нужна вложенная структура. В этом случае вы можете использовать рекурсивную функцию:

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']]]]

licensed under cc by-sa 3.0 with attribution.