Skip to content

Instantly share code, notes, and snippets.

@willy-r
Created December 15, 2020 03:59
Show Gist options
  • Save willy-r/eb45543aeff75f60fbde6657ede4a8fe to your computer and use it in GitHub Desktop.
Save willy-r/eb45543aeff75f60fbde6657ede4a8fe to your computer and use it in GitHub Desktop.
Given a list of folders in a filesystem and the name of a folder to remove, return the new list of folders after removal.
def remove_folder(folders: list[str], folder_to_rm: str) -> list[str]:
if not folders:
return folders
if not isinstance(folder_to_rm, str):
raise ValueError('Enter a valid folder name')
new_folders = []
for i, folder in enumerate(folders):
folder_names = folder.split('/')[1:]
if folder_names[0] == folder_to_rm:
del folders[i]
continue
for i, folder_name in enumerate(folder_names):
if folder_name == folder_to_rm:
folder = ''.join([f'/{f}' for f in folder_names[:i]])
break
if folder not in new_folders:
new_folders.append(folder)
return new_folders
def test_examples():
assert remove_folder(
['/a', '/a/b', '/c/d', '/c/d/e', '/c/f', '/c/f/g'], 'c'
) == ['/a', '/a/b']
assert remove_folder(
['/a', '/a/b', '/c/d', '/c/d/e', '/c/f', '/c/f/g'], 'd'
) == ['/a', '/a/b', '/c', '/c/f', '/c/f/g']
def test_folder_in_the_end():
assert remove_folder(['/a/b/c', '/c/d', '/d/c'], 'd') == ['/a/b/c', '/c']
def test_folder_not_found():
assert remove_folder(['/a/b/c', '/d/e/f'], 'g') == ['/a/b/c', '/d/e/f']
if __name__ == '__main__':
test_examples()
test_folder_in_the_end()
test_folder_not_found()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment