Python: ¿dividir una lista en función de una condición?

¿Cuál es la mejor manera, tanto desde el punto de vista estético como del rendimiento, de dividir una lista de elementos en varias listas basadas en un condicional? El equivalente de

good = [x for x in mylist if x in goodvals]
bad  = [x for x in mylist if x not in goodvals]

¿Hay una manera más elegante de hacer esto?

Update: aquí está el caso de uso real, para explicar mejor lo que estoy tratando de hacer:

# files looks like: [ ('file1.jpg', 33L, '.jpg'), ('file2.avi', 999L, '.avi'), ... ]
IMAGE_TYPES = ('.jpg','.jpeg','.gif','.bmp','.png')
images = [f for f in files if f[2].lower() in IMAGE_TYPES]
anims  = [f for f in files if f[2].lower() not in IMAGE_TYPES]

Respuestas a la pregunta(40)

Su respuesta a la pregunta