2014-11-13 8 views
1

У меня есть необычная проблема сортировки списка, с которой я изо всех сил пытаюсь найти краткий и эффективный способ решения. Проблема заключается в следующем: у меня есть список, называемый индексами, с каждым из элементов в этом списке, соответствующим индексу для данных второго списка. Так, например, первое число в индексе равно нулю, что соответствует первому элементу в данных списка, который равен 1, а индекс 3 соответствует 6 в данных списка, потому что это 6 является третьим элементом в данных списка [в том числе 0-й элемент] ..Python list sorting conundrum

Теперь я хочу, чтобы организовать данные списка, так что они сгруппированы между их индексами, как показано ниже:

indexes = [ 0, 3, 6, 8, 12, 13] 

data = [1, 2, 5, 6, 11, 13, 15, 23, 35, 36, 38, 41, 46] 

Решение:

organised_data = [ [1,2,5], [6,11,13], [15,23], [35,36,38,41], [46] ] 

Я были в этом веками.

ответ

5

Вы можете использовать нарезку между последовательными индексами в списке понимание

>>> [data[indexes[i]:indexes[i+1]] for i in range(len(indexes)-1)] 
[[1, 2, 5], [6, 11, 13], [15, 23], [35, 36, 38, 41], [46]] 
2

Использование zip:

>>> [data[i:j] for i, j in zip(indexes, indexes[1:])] 
[[1, 2, 5], [6, 11, 13], [15, 23], [35, 36, 38, 41], [46]]