0

嘿,我是 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):”存在问题,但无法弄清楚是什么。

4

3 回答 3

1

这是您的基本问题:

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

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

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

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

于 2013-09-18T14:31:50.660 回答
1

在 2.7+ 中,您可以检查 a 是否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
于 2013-09-18T14:34:29.703 回答
0

类型是 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"
于 2013-09-18T14:27:03.317 回答