按整数划分List并检查列表中的任何元素是否为整数(PYTHON)

时间:2013-09-18 14:22:51

标签: python-2.7 floating-point integer division

嘿我是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是整数,它应该打印出newList,即[3.33,7.33,10.0,13.33],但是它的打印“None是整数”。

我确定“如果有任何(在newList中为y的实例(y,int)”存在问题:“但无法弄清楚是什么。

3 个答案:

答案 0 :(得分:1)

这是您的基本问题:

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

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

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

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

答案 1 :(得分: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 :(得分:0)

Type是Python中的严格功能。任何涉及float的操作都会产生另一个float,即使值可以完全表示为整数。这样的事可能适合你:

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"