У меня есть следующий код:
l = ['-1.2', '0.0', '1']
x = 100.0
for i in l:
if i < x:
x = i
print x
Код должен найти самое низкое значение в моем списке (-1.2), но вместо этого когда я печатаю 'x', он находит, что значение все еще 100.0, Где мой код идет не так, как надо?
Похоже, вы хотите преобразовать список в список чисел
>>> foo = ['-1.2', '0.0', '1']
>>> bar = map(float, foo)
>>> bar
[-1.2, 0.0, 1.0]
>>> min(bar)
-1.2
или, если это действительно строки, которые вам нужны, вы хотите использовать клавишу min
аргумент
>>> foo = ['-1.2', '0.0', '1']
>>> min(foo, key=float)
'-1.2'
Python имеет встроенную функцию min
, которая поможет вам найти наименьшее.
Однако вам нужно преобразовать элементы списка в числа, прежде чем вы сможете найти наименьшее целое число (что, разве это не число с плавающей запятой?)
min(float(i) for i in l)
Преобразуйте переменную в число с плавающей запятой перед выполнением сравнения:
if float(i) < float(x):
Проблема в том, что вы сравниваете строки с числами с плавающей запятой, что не сработает.
l
- это список строк. Когда вы помещаете числа в такие одинарные кавычки, вы создаете строки, которые представляют собой просто последовательность символов. Чтобы ваш код работал правильно, вам нужно сделать следующее:
l = [-1.2, 0.0, 1] # no quotation marks
x = 100.0
for i in l:
if i < x:
x = i
print x
Если вы должны использовать список строк, вы можете попытаться позволить Python попытаться составить число из каждой строки. Это похоже на ответ Джастина , за исключением того, что он правильно понимает числа с плавающей запятой (десятичные).
l = ['-1.2', '0.0', '1']
x = 100.0
for i in l:
inum = float(i)
if inum < x:
x = inum
print x
Я надеюсь, что это код, который вы пишете для изучения Python или программирования в целом. Если это так, отлично. Однако, если это производственный код, рассмотрите возможность использования встроенных функций Python.
l = ['-1.2', '0.0', '1']
lnums = map(float, l) # turn strings to numbers
x = min(lnums) # find minimum value
print x
У вас есть строки в списке, и вы сравниваете их с числом 100.0.
Чтобы найти минимальное значение списка, вы можете использовать min
:
x = min(float(s) for s in l) # min of a generator
Или, если вы хотите получить результат в виде строки, а не числа, используйте функцию key:
x = min(l, key=float)
Вы сравниваете не целые числа, а строки. Строки сравниваются лексикографически, то есть символ за символом, а не (как вам кажется) путем преобразования значения в число с плавающей запятой. Сделайте так, чтобы ваш список содержал числа (числа с плавающей запятой или целые числа, в зависимости от того, что вы хотите), или преобразуйте строки в числа с плавающей запятой или целые числа в вашем цикле, прежде чем сравнивать их.
Вас также может заинтересовать встроенная функция min
, которая уже делает то, что делает ваш текущий цикл (то есть без преобразования).