2010-09-10 7 views
0

Est-il possible de convertir cette fonction, de lister la combinaison de compréhension en une seule compréhension de liste (de sorte que keep n'est pas nécessaire)?Conversion de la fonction en compréhension de liste unique

def keep(list, i, big): 
    for small in list[i+1:]: 
     if 0 == big % small: 
      return False 
    return True 

multiples[:] = [n for i,n in enumerate(multiples) if keep(multiples, i, n)] 
+1

À quoi ressemblent les multiples? – nmichaels

+2

pourquoi voulez-vous convertir? Quel est le problème avec votre fonction? Les compréhensions de listes visent à rendre les choses plus claires/non obscures. – nosklo

+0

Pouvez-vous fournir un échantillon d'E/S? – miku

Répondre

6

Je pense que voici:

multiples[:] = [n for i,n in enumerate(multiples) 
         if all(n % small for small in multiples[i+1:])] 
+1

+1 Cela semble plus lisible que le code original pour moi. C'est un peu subjectif, cependant. –

2

multiples[:] = [n for i, n in enumerate(multiples) if 0 not in [n % other for other in multiples[i+1:]]

advisible? Probablement pas.

+0

+1 pour le manque d'intérêt. – llasram

1

La première chose est d'apprendre à ne pas utiliser des noms comme list dans votre code. Rappelez-vous aussi le "faites-en d'abord le travail, puis optimisez". Si vous continuez à apprendre des choses, il est probable que dans tous les cas après un mois, vous n'êtes plus satisfait de votre code. Essayez de rendre le code lisible. Pour cela, il est utile si vous le pouvez (au paradis!) De lire votre propre code après l'avoir mis de côté pendant quelques semaines. Cela dit, il est parfois plus lisible parfois de faire la compréhension de la liste, mais souvent vous pouvez le faire seulement après avoir écrit une version plus stupide du code.

+0

bon point à propos de nommer la liste des variables –

Questions connexes