Python: поиск минимального целого числа - PullRequest
23 голосов
/ 12 апреля 2010

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

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

Ответы [ 13 ]

36 голосов
/ 12 апреля 2010

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

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

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

x = min(l, key=float)
23 голосов
/ 12 апреля 2010

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

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

18 голосов
/ 12 апреля 2010

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

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

или, если вы действительно хотите строки, которую вы хотите использовать min key аргумент

>>> foo = ['-1.2', '0.0', '1']
>>> min(foo, key=float)
'-1.2'
6 голосов
/ 12 апреля 2010

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

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

min(float(i) for i in l)
3 голосов
/ 12 апреля 2010

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
2 голосов
/ 23 июня 2017
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 голосов
/ 18 мая 2015
number_list = [99.5,1.2,-0.3]

number_list.sort()

print number_list[0]
2 голосов
/ 12 апреля 2010

Приведите переменную в число с плавающей точкой, прежде чем делать сравнение:

if float(i) < float(x):

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

1 голос
/ 04 января 2017

Вы должны начать где-нибудь, правильный код должен быть:

Код для возврата минимального значения

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

Но опять же, лучше использовать непосредственно целые числа, а не использовать кавычки

Таким образом !

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

1 голос
/ 24 ноября 2014
l = [-1.2, 0.0, 1]

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

Это ответ, мне это нужно было для домашней работы, взял твой код, и я удалил "" вокруг цифр, потом все заработало, надеюсь, это помогло

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...