Python: нахождение самого низкого целого числа

У меня есть следующий код:

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, Где мой код идет не так, как надо?

25
задан SilentGhost 12 April 2010 в 15:09
поделиться

7 ответов

Похоже, вы хотите преобразовать список в список чисел

>>> 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'
18
ответ дан 28 November 2019 в 17:42
поделиться

Python имеет встроенную функцию min , которая поможет вам найти наименьшее.

Однако вам нужно преобразовать элементы списка в числа, прежде чем вы сможете найти наименьшее целое число (что, разве это не число с плавающей запятой?)

min(float(i) for i in l)
6
ответ дан 28 November 2019 в 17:42
поделиться

Преобразуйте переменную в число с плавающей запятой перед выполнением сравнения:

if float(i) < float(x):

Проблема в том, что вы сравниваете строки с числами с плавающей запятой, что не сработает.

2
ответ дан 28 November 2019 в 17:42
поделиться

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
3
ответ дан 28 November 2019 в 17:42
поделиться

У вас есть строки в списке, и вы сравниваете их с числом 100.0.

0
ответ дан 28 November 2019 в 17:42
поделиться

Чтобы найти минимальное значение списка, вы можете использовать min:

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

Или, если вы хотите получить результат в виде строки, а не числа, используйте функцию key:

x = min(l, key=float)
40
ответ дан 28 November 2019 в 17:42
поделиться

Вы сравниваете не целые числа, а строки. Строки сравниваются лексикографически, то есть символ за символом, а не (как вам кажется) путем преобразования значения в число с плавающей запятой. Сделайте так, чтобы ваш список содержал числа (числа с плавающей запятой или целые числа, в зависимости от того, что вы хотите), или преобразуйте строки в числа с плавающей запятой или целые числа в вашем цикле, прежде чем сравнивать их.

Вас также может заинтересовать встроенная функция min , которая уже делает то, что делает ваш текущий цикл (то есть без преобразования).

23
ответ дан 28 November 2019 в 17:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: