2015-06-23 4 views
1

Я пытаюсь назначить классы списку узлов и отделить все узлы от отдельных списков на основе тега класса. Например, если мы имеем следующий код:Уменьшение размеров списка в Python

#define number of classes 
MaxC=5 
index=[4 4 5 1 4 1 4 5 4 4 3 1 3 3 1 1] 
def indices(index,func): 
    return[v for (v,val) in enumerate(index) if func(val)] 

##Create node classes 
nodeclass=[[],[],[],[],[],[],[],[],[],[]] 
for k in range(0,MaxC): 
    nodeindex=indices(index, lambda p:p==k) 
    nodeclass[k].append([nodeindex]) 

Тогда мы получим список списков, соответствующих места индексных узлов для каждого класса:

[[[[]]] [[[3, 5, 11, 14, 15]]] [[[]]] [[[10, 12, 13]]] 
[[[0, 1, 4, 6, 8, 9]]] [] [] [] [] []] 

Однако этот результат дает списки в списках по спискам в списках. Это становится проблемой позже в моем скрипте, когда я хочу перебирать узлы индекса узла, но получаю возвращенные ошибки, потому что итератор получает список, а не отдельные элементы.

TL; DR: Есть ли способ, который я могу более эффективно генерировать эти расположения индексов, чтобы я не получал список списков? В худшем случае, если это не представляется возможным, как сглаживаются список в виде:

[[],[3,5,11,14,15],[],[10,12,13],[0,1,4,6,8,9],[],[],[],[]] 
+0

Может ли это быть полезным? http://stackoverflow.com/questions/406121/flattening-a-shallow-list-in-python или это: http://stackoverflow.com/questions/952914/making-a-flat-list- out-of-list-of-lists-in-python –

+0

Что это? 'Индекс = [4. 4. 5. 1. 4. 1. 4. 5. 4. 4. 3. 1. 3. 3. 1. 1.] '? Это не правильный Python. –

+0

@ReutSharabani Исправлено. Я скопировал показание с моего терминала iPython и забыл стереть периоды. –

ответ

2

Изменение ваша последняя линия:

nodeclass[k].extend(nodeindex) 

два дополнительных списка оберток вы хотите купить создаются в:

  1. Перечень составляющих внутри функции indices.
  2. [nodeindex] обертывание в приложении.
+0

Спасибо. Раньше я пробовал использовать расширение, но была возвращена ошибка. Я не знаю, почему я не мог понять это раньше, но теперь он работает без ошибок. Огромное спасибо! –

Смежные вопросы