Ne pouvez pas convertir une liste de chaînes de flotteurs
Mon programme est censé lire un document texte avec une série de chiffres et de faire une liste uniquement les nombres positifs. Je ne peux pas convertir les chaînes de caractères dans le texte du document à un flotteur donc je ne peux pas déterminer s'ils sont positifs.
J'ai joint une capture d'écran parce que mon copier coller est buggé.
http://i.stack.imgur.com/L1Z7z.png
Sans nombre = float(number)
, je reçois ['3.7', '-22', '3500', '38', '-11.993', '2200', '-1', '3400', '3400', '-3400', '-22', '12', '11', '10', '9.0']
OriginalL'auteur Rob Blaze | 2012-03-21
Vous devez vous connecter pour publier un commentaire.
Vous pouvez traduire cette liste dans flotteurs facilement:
Mais le problème semble être que les lignes dans votre fichier ne contient pas de personne de flotteurs. Lorsque vous appelez
float(number)
,number
est une ligne du fichier, (de l'erreur) s'affiche contient trois séparés par des espaces, des numéros de "3.7 -22 3500".Ce que vous avez besoin est d'appeler le
float
fonction après fractionnement:Ou, plus fonctionnel:
lst = filter(None, itertools.chain(map(float, line.split()) for line in f))
Ahhhh ok. J'ai oublié l'instruction conditionnelle if vous pouvez ajouter à ceux-ci. Merci!
peut-être que vous pouvez m'aider à nouveau. J'ai besoin de prendre cette liste et de les imprimer afin qu'ils sont dans un document texte, un pour chaque ligne. Je ne peux pas comprendre comment appel à un nombre illimité de numéros plutôt que d'utiliser la fonction range.
Liste des besoins(carte(float, nums)) maintenant.
OriginalL'auteur dhg
Après la lecture du contenu du fichier, vous devez diviser le contenu par des espaces et analyser chaque chiffre séparément. Il est maintenant en essayant d'analyser la chaîne '3.7 -22 3500" comme un seul flotteur qui n'est pas possible.
OriginalL'auteur Simeon Visser
Tout d'abord, ne pas appeler les variables
list
, vous pouvez masquer le haut -list
.Ici est une amélioration:
map()
(plus élégant que d'une compréhension de liste serait.) Mais je pense quenums = [ x for x in nums if x > 0 ]
est plus agréable que lefilter()
- juste mon de 0,02$.Pas besoin de bande de fuite de l'espace;
split()
fait pour vous:"has trailing\n".split()
rendements['has', 'trailing']
OriginalL'auteur orlp