2012-10-20 3 views
0

C'est ce que je suis censé faire:compréhension liste des cotes d'élévation au carré

Compte tenu de la nums variable dont la valeur est une liste de nombres entiers, écrire une instruction d'affectation qui attribue à la square_odds variable de la liste des carrés des nombres impairs dans la liste nums.

Vous devez utiliser la compréhension de liste.

Voici ce que j'ai jusqu'ici, je sais que la partie de gamme est fausse mais à quoi est-ce censé ressembler?

nums = [2 ** square_odds for square_odds in range(nums) if square_odds != x%2] 

Je pense qu'il y a d'autres endroits qui sont faux mais je ne suis pas sûr.

je l'ai changé

nums = [square_odds**2 for square_odds in range(100) if square_odds%2 != 0] 

i reçu le message

incorrect: vous n'avez pas affecté à square_odds.

+2

Qu'est-ce que 'x' à la fin? Et c'est ainsi que vous placez un nombre comme vous le faites au début? On dirait que vous avez besoin de quelques 'Mathématiques 'en premier. –

+0

Où l'utilisez-vous exactement? –

+2

Vous avez complètement mal compris la mission. 'nums' est une liste de nombres,' square_odds' devrait être une liste des carrés de tous les nombres impairs dans 'nums'. Il est donc inutile d'assigner nums ou itérer sur 'range (nums)' - vous devez parcourir directement nums'. – l4mpi

Répondre

1
  • Pour tester si un nombre est impair ou non, vous devez prendre son module avec 2 et tester si son 0 ou non. Donc, si num % 2 != 0, votre num est odd

  • à la case départ un nombre donné, vous faites: - number ** 2 et pas2 ** number

  • Vous avez également un argument 3rd en range fonction, qui indique la step-value. Vous pouvez utiliser (range(1, last_num, 2)) pour obtenir le numéro odd. De cette façon, vous n'aurez pas besoin d'un opérateur modulus.

Vous pouvez faire les changements ci-dessus pour obtenir votre travail de compréhension de liste.

Compte tenu de votre question, où nums est déjà une liste de numéros, vous devez simplement utiliser nums plutôt que range(nums) comme ceci: -

nums = [square_odds**2 for square_odds in nums if square_odds%2 != 0] 
0
nums = [square_odds**2 for square_odds in range(nums) if square_odds%2 != 0] 
2

En outre, puisque nums est déjà une liste ne pas utiliser la plage (nums). Range renvoie une liste avec les valeurs de début et de fin. Itérer à travers vos nums liste de cette façon (une partie de votre compréhension de la liste):

[SQUARING OPERATION HERE for num in nums MODULO TEST HERE] 

puisque c'est des devoirs que je ne vais pas écrire tout.

0

Et cette solution?

square_odds=[i*i for i in filter(lambda x:x&1,nums)] 
Questions connexes