我有一个列表,用于处理目录上的一系列任务。有时,该过程将卡在某个目录中。目前,我正在删除该元素,然后通过列表重新运行该过程。但是,这需要一段时间。
这就是我现在正在做的事情:
directories = next(os.walk('/home'))[1]
directories.remove('brokendirectory')
process_directory(directory)
我想做的是删除每个目录,包括已损坏的目录,并且仅在该损坏目录之后的目录列表上工作。像这样:
def clear_list(directories, element):
new_list = []
for directory in directories:
if directory == element:
break
else:
new_list.append(directory)
return(new_list)
directories = next(os.walk('/home'))[1]
new_directories = clear_list(directories,'brokendirectory')
process_directory(new_directories)
很明显,我的功能无法按原样工作。
如何删除列表中的所有元素(包括指定的元素)并返回新列表进行处理?
答案 0 :(得分:2)
您可以使用列表的index方法找到所需元素的索引,然后使用切片将所有元素删除,直到包括该元素。
directories = directories[directories.index('brokendirectory')+1:]
答案 1 :(得分:1)
找到断开目录的索引:
idx = directories.index('brokendirectory')
使用该索引切片新列表:
new_directories = directories[idx+1:]
然后处理:
process_directory(new_directories)
答案 2 :(得分:0)
您可以使用函数dropwhile()
:
from itertools import dropwhile
l = 'ABCDEFG'
element = 'D'
print(list(dropwhile(lambda x: x != element, l)))
# ['D', 'E', 'F', 'G']