-1
votes

Transformer en compréhension de la liste

J'ai donné un numéro (N), ainsi qu'un éventail de diviseurs possibles pour ce numéro. Je suis censé renvoyer une liste de tous les nombres premiers éventuels de la plage (n) dans l'ordre inverse, et il doit être écrit dans une ligne via la compréhension de la liste.

J'ai écrit quelque chose avec une ligne qui obtient la sortie nécessaire, mais je ne peux pas comprendre comment l'écrire comme une compréhension de liste.

Le diviseur: xxx

Ceci est le code J'ai: xxx

Il s'agit de la doctrine incluse avec la question: xxx


3 Réponses :


0
votes

Cela devrait le faire.

import math
import itertools
n = 100
DOUBLE = 2
divisors = [i for i in range(DOUBLE, math.ceil(n/DOUBLE))]

#Find all combinations of divisors
prod = itertools.product(divisors, repeat=2)

#Run through all combinations to get non primes
non_primes = [t[0]*t[1] for t in prod]

#Get primes
print([item for item in list(range(2, n)) if item not in non_primes][::-1])


0 commentaires

2
votes

Vous pouvez utiliser une compréhension de liste qui itière un entier de N à 2 dans l'ordre inverse et ne conserve que ceux qui sont l'un des diviseurs donnés eux-mêmes, ou ne peut pas être divisé par aucun des diviseurs: xxx


1 commentaires

Utilisation sournoise du modulo et de la véracité de la vérité! = 0 - moi aime.



0
votes

Ma SUGESSTION serait de vraiment l'incocorer comme une doublure.

code xxx

> xxx

explication

  1. Les non-premiers n'ont pas besoin d'être construits à partir de la compréhension de la liste. Plage Retourne un objet générateur pouvant être utilisé pour l'iteration à droite.
  2. Les compréhensions de la liste peuvent être chaînées ou «imbriquées» également, comme des boucles normales.
  3. La fonction intégrée triée avec le drapeau de l'argument inversé garantit que la sortie est dans l'ordre inversé. Un Set n'est pas nécessairement trié.

    D'ailleurs, nice art d'utiliser la soustraction sur des ensembles pour emporter des éléments de la première série.


0 commentaires