Qual é a melhor maneira, esteticamente e do ponto de vista de desempenho, para dividir uma lista de itens em várias listas com base em uma condicional? O equivalente a:
good = [x for x in mylist if x in goodvals]
bad = [x for x in mylist if x not in goodvals]
existe uma maneira mais elegante de fazer isso?
Atualização: aqui está o caso de uso real, para explicar melhor o que estou tentando fazer:
# 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 a lista em uma coleção ordenada de sub-listas consecutivas. Por exemplo split([1,2,3,4,5,3,6], 3) -> ([1,2],[4,5],[6])
, ao contrário de dividir os elementos de uma lista por categoria.
IMAGE_TYPES = set('.jpg','.jpeg','.gif','.bmp','.png')
. n (1) em vez de n (o / 2), praticamente sem diferença na legibilidade.