i=0 lst=d for i in range(dl): f=d[i] print f if fnmatch.fnmatch(f,mask): print "ff" else: print "file is not be reader" del lst[1] i=i+1
Массив lst дублирует массив d, после несоответствующие маске элементы массива должны быть удалены, но вместо этого питон ругается
IndexError: list index out of range
причем вот в этом месте
f=d[i]
Хотя при удалении этой строки все работает
del lst[1]
Но мне нужно удалить несоответствующие маске элементы, кто знает в чем проблема?
Для начала
from copy import deepcopy lst = deepcopy(d) # вместо lst = d
Без этого lst и d будут ссылаться на один объект
Чему равен ваш «dl»? Если он больше чем размерность d — то в чем тогда вопрос? операцией:
del lst[1]
вы удаляете элемент не только из lst, но и из d. Что бы сделать копию d в lst — воспользуйтесь slice’ом:
lst = d[:]
ну это уже зависит от логики вашего скрипта в целом.
в Python есть прекрасная функция «filter», возвращает список объектов, прошедших фильтрацию.
В Вашем случае можно написать что-то вроде такого:
import functools filter_func = functools.partial(fnmatch.fnmatch, mask) filter(filter_func, lst)
filter(filter_func, lst) вернет итератор по всем элементам списка lst, которые удовлетворяют маске.