Простая реализация могла бы просто использовать словарь для определения противоположных направлений. При обработке списка, если текущее направление противоположно последнему, удалить последнее из вывода. В противном случае добавьте в список новое направление:
dirs = {'NORTH': 'SOUTH', 'SOUTH': 'NORTH', 'EAST': 'WEST', 'WEST': 'EAST'}
def dirReduc(input):
output = []
for dir in input:
if output and output[-1] == dirs[dir]:
output.pop()
else:
output.append(dir)
return output
print(dirReduc(["NORTH", "SOUTH", "SOUTH", "EAST", "WEST", "NORTH", "WEST"]))
print(dirReduc(["NORTH", "WEST", "SOUTH", "EAST"]))