¿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 alguna manera más elegante de hacer esto?
Actualización: 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]
str.split(), para dividir la lista en una colección ordenada de sublistas consecutivas. Por ejemplo split([1,2,3,4,5,3,6], 3) -> ([1,2],[4,5],[6]), en lugar de dividir los elementos de una lista por categoría.
IMAGE_TYPES = set('.jpg','.jpeg','.gif','.bmp','.png'). n (1) en lugar de n (o / 2), prácticamente sin diferencias en la legibilidad.