【问题标题】:Dividing List by integer and checking if any element in list is integer (PYTHON)将列表除以整数并检查列表中的任何元素是否为整数(PYTHON)
【发布时间】:2013-09-23 08:48:02
【问题描述】:

嘿,我是 python 的初学者,我写了这段代码,但它不起作用,我确定它是我看不到的小东西。

    myList = [10,22,30,40]
    myInt = 3.0
    newList = [x/myInt for x in myList]
    if any(isinstance(y,int) for y in newList):
        print newList
    else:
        print "None are integers"

由于 30/3 =10 且 10 是整数,它应该打印出 [3.33, 7.33, 10.0, 13.33] 的 newList,但它打印的是“None are integers”。

我确定“if any(isinstance(y,int) for y in newList):”存在问题,但无法弄清楚是什么。

【问题讨论】:

  • newList 项目是浮动的。
  • 3.0 也不是整数。

标签: python-2.7 floating-point integer division


【解决方案1】:

在 2.7+ 中,您可以检查 float 是否可以表示为 int

myList = [10,22,30,40]
myInt = 3.0

divided = (el / myInt for el in myList) # generator over floats
is_integer = [el for el in divided if el.is_integer()] # filter ints only
# [10.0]

所以你的支票是:

if any((el / myInt).is_integer() for el in myList):
    # do something

【讨论】:

    【解决方案2】:

    这是你的基本问题:

    >>> 30/3
    10
    >>> 30/3.0
    10.0
    >>> type(10.0)
    <type 'float'>
    

    整数是一个整数,没有小数部分。浮点数是一个数字,但带有小数部分(小数点),即使它的 .0 如上所述。

    虽然它们都是数字,但对于 Python,它们是两种不同的类型

    由于您是除以浮点数,因此所有结果都是浮点数。因此,您的检查失败,因为虽然它们是 数字,但它们不是 整数

    【讨论】:

      【解决方案3】:

      类型是 Python 中的一个严格特性。任何涉及浮点数的操作都会产生另一个浮点数,即使值可以精确地表示为整数。像这样的东西可能对你有用:

      myList = [10,22,30,40]
      myInt = 3
      newList = [x%myInt for x in myList] # A list of remainders now, not quotients
      if any(y == 0 for y in newList):
          print [ x/(1.0*myInt) for x in myList ]   # Reproduce your original myList 
      else:
          print "None are integers"
      

      【讨论】:

        猜你喜欢
        • 2014-12-07
        • 1970-01-01
        • 1970-01-01
        • 2012-12-07
        • 1970-01-01
        • 2020-06-20
        • 2013-05-30
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多