Quelle est la meilleure façon, tant sur le plan esthétique que du point de vue des performances, de diviser une liste d'éléments en plusieurs listes en fonction d'un conditionnel? L'équivalent de:
good = [x for x in mylist if x in goodvals]
bad = [x for x in mylist if x not in goodvals]
existe-t-il une manière plus élégante de procéder?
Mise à jour: voici le cas d'utilisation réel, pour mieux expliquer ce que j'essaie de faire:
# 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()
, pour diviser la liste en une collection ordonnée de sous-listes consécutives. Par exemple split([1,2,3,4,5,3,6], 3) -> ([1,2],[4,5],[6])
, par opposition à la division des éléments d'une liste par catégorie.
IMAGE_TYPES = set('.jpg','.jpeg','.gif','.bmp','.png')
. n (1) au lieu de n (o / 2), avec pratiquement aucune différence de lisibilité.