Python在特定元素之前删除列表中的所有元素

时间:2019-01-25 15:07:30

标签: python

我有一个列表,用于处理目录上的一系列任务。有时,该过程将卡在某个目录中。目前,我正在删除该元素,然后通过列表重新运行该过程。但是,这需要一段时间。

这就是我现在正在做的事情:

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)

很明显,我的功能无法按原样工作。

如何删除列表中的所有元素(包括指定的元素)并返回新列表进行处理?

3 个答案:

答案 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']