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