Подтвердить что ты не робот

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

4b9b3361

Ответ 1

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

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

Ответ 2

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

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

Ответ 3

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

>>> 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'

Ответ 4

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

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

min(float(i) for i in l)

Ответ 5

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 попытался сделать число из каждой строки. Это похоже на Justin answer, за исключением того, что он правильно понимает числа с плавающей запятой (десятичные).

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

Ответ 6

Переместите переменную в float перед выполнением сравнения:

if float(i) < float(x):

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

Ответ 7

l = [-1.2, 0.0, 1]

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

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

Ответ 8

number_list = [99.5,1.2,-0.3]

number_list.sort()

print number_list[0]

Ответ 9

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

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

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

Ответ 10

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))

Ответ 11

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

Ответ 12

Или никакого преобразования float вообще, просто указав поплавки в списке.

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

или

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