【问题标题】:Python: finding lowest integerPython:找到最小的整数
【发布时间】:2011-02-07 01:21:17
【问题描述】:

我有以下代码:

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 我的代码哪里出错了?

【问题讨论】:

  • 看起来你想要 "list = [1.2, 0.0, 1]" 而不是引用的值。 (小写 L 也是一个错误的变量名……它看起来太像一个)。
  • 整数是整数,如 4、20、0 和 -2。像 -1.2 这样的数字不是整数。你明白吗?这与您想在这里做什么有什么关系?
  • 您所拥有的是str 值,而不是int 值;您无法评估 str 的值,因为它们不是 ints。

标签: python list integer


【解决方案1】:

'''函数'''

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

【讨论】:

    【解决方案2】:

    要查找列表的最小值,您不妨使用min

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

    或者,如果您希望将结果作为字符串而不是浮点数,请使用key function

    x = min(l, key=float)
    

    【讨论】:

    • min 有一个 key 参数用于类似的情况,用法类似于 x = min(l, key=float)。它与发布的代码略有不同,它从原始可迭代对象(即字符串 '-1.2')而不是结果(即浮点数 -1.2)返回项目。
    • @OlivierVerdier 你做float(s) for s in l 部分有什么特别的原因吗?为什么你不能只做min(l)?我刚刚尝试过,它有效。会有什么不同?
    【解决方案3】:
    l = [-1.2, 0.0, 1]
    
    x = 100.0
    for i in l:
        if i < x:
            x = i
    print (x)
    

    这就是答案,我的作业需要这个,拿了你的代码,然后我删除了数字周围的“”,然后它起作用了,我希望这有帮助

    【讨论】:

      【解决方案4】:
      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))
      

      【讨论】:

        【解决方案5】:

        你必须从某个地方开始正确的代码应该是:

        返回最小值的代码

        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

        【讨论】:

          【解决方案6】:
          number_list = [99.5,1.2,-0.3]
          
          number_list.sort()
          
          print number_list[0]
          

          【讨论】:

          • 请添加一些解释以完成答案。没有解释,只有代码,这个答案作为解决方案没有帮助(更不用说它是否解决了问题)。
          【解决方案7】:

          或者根本不通过在列表中指定浮点数来​​进行浮点转换。

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

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

          【讨论】:

            【解决方案8】:

            您似乎想将列表转换为数字列表

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

            或者如果它真的是你想要的字符串,你想使用minkey参数

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

            【讨论】:

              【解决方案9】:

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

              【讨论】:

                【解决方案10】:

                Python 有一个内置的min 函数来帮助你找到最小的。

                但是,您需要将列表项转换为数字,然后才能找到最小的整数(什么,那不是浮点数吗?)

                min(float(i) for i in l)
                

                【讨论】:

                  【解决方案11】:

                  列表中有字符串,并且正在将它们与数字 100.0 进行比较。

                  【讨论】:

                    【解决方案12】:

                    在进行比较之前将变量转换为浮点数:

                    if float(i) < float(x):
                    

                    问题是您将字符串与浮点数进行比较,这是行不通的。

                    【讨论】:

                    • 谢谢,让我在周一早点回答问题:)
                    【解决方案13】:

                    您不是在比较整数,而是在比较字符串。字符串按字典顺序进行比较 - 意味着逐个字符 - 而不是(如您所愿)通过将值转换为浮点数。让您的列表包含数字(浮点数或整数,取决于您想要什么),或者在比较它们之前将字符串转换为循环中的浮点数或整数。

                    您可能还对 min 内置函数感兴趣,它已经完成了您当前循环所做的事情(也就是说,没有转换。)

                    【讨论】:

                      猜你喜欢
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      • 2022-06-15
                      • 2015-06-07
                      • 2020-06-20
                      • 1970-01-01
                      相关资源
                      最近更新 更多