2014-07-08 2 views
0

Как я могу нарезать список индексом, основанным на переменной?Списки разрезов с переменным индексом

т.е.

splitMe = range(0,10) 

startPlace = 3 
endPlace = 5 

splitMe[startPlace:endPlace] #<------This is essentially what I need 

Таким образом, можно вводить различные числа в startPlace и endPlace и получить другой кусочек. Это, вероятно, кажется тривиальным, но я сокращаю разделы из 230 000 строк данных. Есть расчеты за startPlace и endPlace, которые связаны с датами и временем.

Это то, что я сейчас:

#Find matching data with datetime 
for a, line in enumerate (Time): 
    if line == startDate: 
     print "Slice starts at:", a 

for c, line in enumerate (Time): 
    if line == endDate: 
     print "Slice ends at:", c 

#Create lists 
slice_laser_c = [x for x in laser_C if a <= x < c] 

EDIT Когда я запускаю этот код, он печатает «фрагмент начинается: 0» и «Срез заканчивается: 5», который является именно то, что он . «ы должны делать END EDIT При печати slice_laser_c я получаю

[] #<----- Essentially, this is the problem 

в простом смысле, это то, что происходит:

big_list = range(0,10) 
a = 2 
c = 5 

BetweenList = [x for x in big_list if a <= x < c] 
print BetweenList 
+0

Подсказка: что вы видите, если вы 'печатать, c' прямо перед' slice_laser_c' линии? – Kevin

+0

В любом случае, если критерии для поиска начальных и конечных индексов - это просто проверка равенства, может быть более эффективным просто выполнить 'a = Time.find (startDate)', вместо того, чтобы выполнять повторный просмотр в списке вручную. – Kevin

+0

Я вижу, что это проблема. 'a = 223632 c = 223632' – Commmett

ответ

0

Почему бы не использовать синтаксис сплайсинга, встроенный в Python? (Может быть, я не вижу что-то)

Как:

list = [1,2,3,4,5,6,7,8,9] 
a=3 
c=7 
split_list = list[a:(c+1)] #<-----The +1 is because the splice syntax goes to end-1 
print split_list 
+0

Я думал, что попробовал это, это именно то, что мне нужно. Я попробовал 'list [start: end]', но по какой-то причине он не удался. Хорошо спасибо большое! – Commmett

0

Проблема appers быть, что вы перебор прямо через все Times без остановки, когда вы найдете значения, которые вы хотите. Поэтому в конце обеих петель a и c находятся на максимальном значении. Может быть, вы хотите, чтобы break цикл, как только вы нашли нужное значение?

+0

Кажется, что исправлено то, что Кевин упомянул выше, 'a' и' c' теперь сообщают как значения, которые они должны быть ('0' и' 5'). Теперь мне нужно исправить мое понимание линии. – Commmett

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