2015-08-13 2 views
1

Я хочу удалить разделы по индексу из списка. т.е. из индекса 12:90 и индекса 100: 120 и т. д.Удаление нескольких разделов из списка с использованием индексов

Я знаю, что я не могу изменить список. Я перебираю цикл, если я повторяю от начала до конца списка, поэтому я попытался выполнить цикл из конец списка до начала. Это не работает, так как я не могу получить доступ к различным элементам моего перевернутого списка.

Это мой текущий код тест, который я думаю, это очевидно, что я хочу, чтобы это произошло, но у меня есть сообщение об ошибке: TypeError: 'reversed' object has no attribute '__getitem__'

a = [5,7,23,5,2,6,2,7,98,3] 
indexs = 0,2,5,7 
widened_excluder = reversed(indexs) 

for i in widened_excluder: 
    if i != len(indexs)-1: 
     start = widened_excluder[i+1] 
     end = widened_excluder[i] 
     del a[start:end] 

Edit: Это функция, я использую (если с использованием реальных данных), чтобы получить диапазоны я хочу исключенные:

def zero_excluder(curve, lnO, ts): 
    indexs = curve.nonzero() 
    indexs = indexs[0] 
    zero_gap = [] 
    for i in indexs: 
     if i > 5 and i < len(indexs) - 6: 
      if indexs[i] - indexs[i-1] > 2: 
       zero_gap.append([indexs[i-6], indexs[i+5]]) 
    for pair in zero_gap: 
     start = pair[0] 
     end = pair[1]+1 
     del 

    lnO = lnO[indexs] 
    ts = ts[indexs] 
    return lnO, ts 
+0

Как вы получаете диапазоны для индексов вы не хотите? Приходят ли они из пользователя или у вас есть набор диапазонов, которые, как вы знаете, вам не нужны? – IanAuld

+0

У меня есть другая функция, которая дает мне диапазон. Теперь я добавлю код в качестве редактирования вопроса. –

+0

Полностью в стороне, но множественное число индекса - это индексы. Извините, но это сводит меня с ума :-). – IanAuld

ответ

0

Если вы хотите, чтобы исключить многие диапазоны, и вы можете использовать NumPy, проще всего было бы создать маску и применить его к копии ваших данных. Маска будет иметь True для элементов, которые вы хотите сохранить, и False для элементов, которые вы не хотите:

# your data 
arr = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 
# slices you want to delete, i.e. 'zero_gap' 
slices = [[2, 4], [7, 9]] 

# create a mask of Trues and turn off elements 
# that you want to remove 
mask = np.ones(len(arr), dtype=np.bool) 
for s in slices: 
    mask[s[0] : s[1] + 1] = False 

# apply a mask 
remaining = np.copy(arr)[mask] 
print remaining # [0, 1, 5, 6, 10] 
0

Удаление элементов по одному плохо в вашем случае, поскольку это поражает производительность вряд ли. Нарезка синтаксис, вероятно, будет делать трюк:

l = range(200) 
l2 = l[:12] + l[90:100] + l[120:] 
+0

поэтому первое число в скобки, т. е. 90 является эксклюзивным, и последнее число включено, да? –

+0

Да. И вы всегда можете проверить https://docs.python.org/2/tutorial/introduction.html для таких мелких вещей – Slam

+0

Отлично, спасибо. у вас есть идея, как я могу поместить это в цикл для произвольного диапазона диапазонов? Это было бы вместо последнего цикла цикла (который фактически не делает много атм) в редактировании. измените lnO и ts так, чтобы диапазоны в zero_gap были удалены. –

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