4

Je cherche à générer une liste de chaînes énumérées en utilisant la compréhension de liste dans un bloc-notes IPython. Cela fonctionne, mais me donne une sortie étrange que je ne comprends pas.Compréhension de liste dans IPython Notebook retournant [Aucun, Aucun, Aucun ...]

cols = [] 
[cols.append('Value'+str(hour)) for hour in xrange(1,25)] 

Après avoir exécuté la cellule, cols retourne la liste appropriée [Value1,Value2...Value24], mais dans mon ordinateur portable, je reçois une liste de sortie de 24 None. Le code fonctionne, mais la sortie étrange me donne l'impression d'avoir fait quelque chose de mal, et il semble négligé. Pourquoi ai-je cette sortie, et y a-t-il un moyen de m'en débarrasser?

+1

Eh bien, qu'est-ce que 'cols.append' retourne? «Aucun», n'est-ce pas? C'est de là que viennent vos 'None's: vous avez dit à Python de mettre le résultat de' cols.append() 'dans une liste, 24 fois. – kindall

+0

Parce qu'une liste de compréhension crée une nouvelle liste. Dans votre cas, une liste des valeurs de retour de 'append', qui se trouve être' None' – pvg

Répondre

2

Les None s que vous voyez dans la liste sont le résultat de l'évaluation de l'appel de fonction cols.append('Value'+str(hour)). Vous voyez le résultat cols avec les bonnes entrées, car ils sont ajoutés, mais la liste générée dans cette méthode de compréhension de la liste, consiste en fait uniquement à partir des résultats de l'évaluation append() plusieurs fois.

Essayez plutôt cols = ['Value'+str(hour) for hour in xrange(1,25)]

+0

Très bien qui l'a fait. Probablement aurait dû être évident, merci! – Alex

2

cols.append(value) ajoute la valeur à cols mais retourne None, il ne retourne pas cols avec la valeur jointe, donc après votre code, le contenu a Col. que vous voulez, mais vous pouvez le faire mieux avec ceci:

cols = ['Value'+str(hour) for hour in xrange(1,25)]