web-dev-qa-db-fra.com

Python: trouver le plus petit entier

J'ai le code suivant:

l = ['-1.2', '0.0', '1']

x = 100.0
for i in l:
    if i < x:
        x = i
print x

Le code devrait trouver la valeur la plus basse de ma liste (-1.2), mais au lieu d’imprimer «x», la valeur est toujours 100.0 Où mon code va-t-il mal tourner?

22
sarah

Pour trouver la valeur minimale d’une liste, vous pouvez aussi bien utiliser min :

x = min(float(s) for s in l) # min of a generator

Ou, si vous voulez que le résultat soit sous la forme d'une chaîne plutôt que d'un float, utilisez une fonction key :

x = min(l, key=float)
33
Olivier Verdier

Vous ne comparez pas des nombres entiers, vous comparez des chaînes. Les chaînes comparent lexicographiquement (sens par caractère) au lieu de (comme vous semblez vouloir) convertir la valeur en float. Faites en sorte que votre liste conserve des nombres (flottants ou entiers, selon ce que vous voulez), ou convertissez les chaînes en flottants ou en entiers dans votre boucle, avant de les comparer.

Vous pouvez également être intéressé par la fonction intégrée min, qui fait déjà ce que fait votre boucle actuelle (sans la conversion, c’est-à-dire).

23
Thomas Wouters

Il semble que vous souhaitiez convertir la liste en une liste de nombres

>>> foo = ['-1.2', '0.0', '1']
>>> bar = map(float, foo)
>>> bar
[-1.2, 0.0, 1.0]
>>> min(bar)
-1.2

ou si vous voulez vraiment utiliser les chaînes, vous voulez utiliser l'argument min de key

>>> foo = ['-1.2', '0.0', '1']
>>> min(foo, key=float)
'-1.2'
18
Mike Graham

Python a une fonction min intégrée pour vous aider à trouver le plus petit.

Cependant, vous devez convertir vos éléments de liste en nombres avant de pouvoir trouver le nombre entier le plus bas (quoi, n'est-ce pas flottant?)

min(float(i) for i in l)
6
satoru

l est une liste de chaînes. Lorsque vous placez des chiffres entre guillemets simples, vous créez des chaînes, qui ne sont qu'une séquence de caractères. Pour que votre code fonctionne correctement, vous devez procéder comme suit:

l = [-1.2, 0.0, 1]  # no quotation marks

x = 100.0
for i in l:
    if i < x:
        x = i
print x

Si vous devez utiliser une liste de chaînes, vous pouvez laisser Python essayer de créer un nombre à partir de chaque chaîne. Ceci est similaire à la réponse de Justin , sauf qu'elle comprend correctement les nombres à virgule flottante (décimale).

l = ['-1.2', '0.0', '1']

x = 100.0
for i in l:
    inum = float(i)
    if inum < x:
        x = inum
print x

J'espère que c'est ce code que vous écrivez pour apprendre soit Python, soit la programmation en général. Si c'est le cas, génial. Toutefois, s'il s'agit d'un code de production, envisagez d'utiliser les fonctions intégrées de Python.

l = ['-1.2', '0.0', '1']
lnums = map(float, l)  # turn strings to numbers
x = min(lnums)  # find minimum value
print x
3
Wesley

Convertissez la variable en float avant de faire la comparaison:

if float(i) < float(x):

Le problème est que vous comparez des chaînes à des flottants, ce qui ne fonctionnera pas.

2
Justin Ethier
number_list = [99.5,1.2,-0.3]

number_list.sort()

print number_list[0]
2
Yang Wang
list1 = [10,-4,5,2,33,4,7,8,2,3,5,8,99,-34]

print(list1)

max_v=list1[0]

min_v=list1[0]

for x in list1:
    if x>max_v:
        max_v=x
        print('X is {0} and max is {1}'.format(x,max_v))
for x in list1:
    if x<min_v:
        min_v=x
        print('X is {0} and min is {1}'.format(x,min_v))

print('Max values is ' + str(max_v))
print('Min values is ' + str(min_v))
2
AlexPes

Vous devez commencer quelque part, le code correct devrait être: 

Le code pour renvoyer la valeur minimale  

l = [ '0.0', '1','-1.2'] x = l[0] for i in l: if i < x: x = i print x

Mais encore une fois, il est bon d’utiliser directement des entiers au lieu d’utiliser des guillemets '' 

Par ici

l = [ 0.0, 1,-1.2] x = l[0] for i in l: if i < x: x = i print x

1
Fahtima
l = [-1.2, 0.0, 1]

x = 100.0
for i in l:
    if i < x:
        x = i
print (x)

C’est la réponse, j’en avais besoin comme devoir, j’ai pris votre code et j’ai supprimé le "" autour des chiffres, puis ça a marché, j’espère que cela a aidé 

1
Horse

Ou aucune conversion de float en spécifiant simplement des floats dans la liste.

l = [-1.2, 0.0, 1]
x = min(l)

ou

l = min([-1.2, 0.0, 1])
1
BrendanSimon

Vous avez des chaînes dans la liste et vous les comparez au nombre 100.0.

0
Plamen Dragozov

'''Les fonctions'''

import math

#functions
def min3(x1,x2,x3):
    if x1<= x2 and x1<= x3:
        return x1
    Elif x2<= x1 and x2<= x3:
        return x2
    Elif x3<= x2 and x3<= x1:
          return x3
print(min3(4, 7, 5))

print(min3(4, 5, 5))

print(min3(4, 4, 4))

print(min3(-2, -6, -100))

print(min3("Z", "B", "A"))
0
your plugg