it-swarm.com.de

Python: Suche nach der niedrigsten Ganzzahl

Ich habe folgenden Code:

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

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

Der Code sollte den niedrigsten Wert in meiner Liste (-1.2) finden, aber wenn ich 'x' drucke, wird festgestellt, dass der Wert immer noch 100.0. Ist. Wo geht mein Code schief?

22
sarah

Um den Mindestwert einer Liste zu ermitteln, können Sie auch min verwenden:

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

Oder wenn Sie das Ergebnis als Zeichenfolge anstelle eines Gleitkommas verwenden möchten, verwenden Sie eine Tastenfunktion :

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

Sie vergleichen keine Ganzzahlen, Sie vergleichen Strings. Strings vergleichen lexikographisch - dh Zeichen für Zeichen - anstelle von (wie Sie es wünschen), indem Sie den Wert in einen Float konvertieren. Stellen Sie sicher, dass Ihre Liste Zahlen enthält (Floats oder Integer, je nachdem, was Sie möchten), oder konvertieren Sie die Zeichenfolgen in Floats oder Integer in Ihrer Schleife, bevor Sie sie vergleichen.

Sie könnten auch an der eingebauten Funktion min interessiert sein, die bereits die Funktionen Ihrer aktuellen Schleife ausführt (dh ohne Konvertierung).

23
Thomas Wouters

Es sieht so aus, als ob Sie die Liste in eine Liste von Nummern konvertieren möchten

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

oder, wenn es wirklich Zeichenfolgen sind, die Sie möchten, verwenden Sie das min-Argument von key

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

Python verfügt über eine eingebaute min-Funktion, mit der Sie das Kleinste finden können.

Sie müssen jedoch Ihre Listenelemente in Zahlen umwandeln, bevor Sie die niedrigste Ganzzahl finden können (was ist das nicht Float?).

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

l ist eine Liste von Strings. Wenn Sie Zahlen in solche Anführungszeichen setzen, erstellen Sie Zeichenfolgen, die nur aus einer Folge von Zeichen bestehen. Damit Ihr Code ordnungsgemäß funktioniert, müssen Sie Folgendes tun:

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

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

Wenn Sie eine Liste von Strings verwenden müssen, können Sie versuchen, Python versuchen zu lassen, aus jedem String eine Zahl zu machen. Dies ist ähnlich zu Justins Antwort , es werden jedoch Gleitkommazahlen (Dezimalzahlen) richtig verstanden.

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

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

Ich hoffe, dass dies ein Code ist, den Sie schreiben, um entweder Python zu lernen oder generell zu programmieren. Wenn dies der Fall ist, großartig. Wenn dies jedoch Produktionscode ist, sollten Sie die integrierten Funktionen von Python in Betracht ziehen.

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

Wandeln Sie die Variable in einen Float um, bevor Sie den Vergleich durchführen:

if float(i) < float(x):

Das Problem ist, dass Sie Strings mit Floaten vergleichen, was nicht funktioniert.

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

Du musst irgendwo anfangen, der korrekte Code sollte sein: 

Der Code, um den Mindestwert zurückzugeben  

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

Aber es ist auch gut, direkt ganze Zahlen anstelle von Anführungszeichen zu verwenden. '' 

Diesen Weg

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)

Dies ist die Antwort, ich brauchte das für meine Hausaufgaben, nahm Ihren Code und löschte das "" um die Zahlen, es hat dann funktioniert, ich hoffe, das hat geholfen 

1
Horse

Oder gar keine Float-Konvertierung, indem Sie einfach Floats in der Liste angeben.

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

oder

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

Sie haben Strings in der Liste und vergleichen sie mit der Nummer 100.0.

0
Plamen Dragozov

'' 'Funktionen' ''

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