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

Ken*_*n J 4 python

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

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

directories = next(os.walk('/home'))[1]
directories.remove('brokendirectory')
process_directory(directory)
Run Code Online (Sandbox Code Playgroud)

我想要做的是删除每个目录,包括损坏的目录,并且只在该损坏目录之后的目录列表上工作。像这样的东西:

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)
Run Code Online (Sandbox Code Playgroud)

显然,我的函数不能按原样工作。

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

fst*_*_22 6

您可以使用列表的 index 方法找到所需元素的索引,然后使用切片删除所有元素,包括它。

directories = directories[directories.index('brokendirectory')+1:]
Run Code Online (Sandbox Code Playgroud)


Myk*_*tko 6

您可以使用该功能dropwhile:

from itertools import dropwhile

l = 'ABCDEFG'
element = 'D'

list(dropwhile(lambda x: x != element, l))

# ['D', 'E', 'F', 'G']
Run Code Online (Sandbox Code Playgroud)


Tig*_*kT3 2

找到损坏目录的索引:

idx = directories.index('brokendirectory')
Run Code Online (Sandbox Code Playgroud)

使用该索引对新列表进行切片:

new_directories = directories[idx+1:]
Run Code Online (Sandbox Code Playgroud)

然后处理:

process_directory(new_directories)
Run Code Online (Sandbox Code Playgroud)