如何判断列表中的项目是否包含特定字符
我有一个脚本,它会生成一个数字列表。我想把列表中所有不是整数的数字去掉,也就是那些小数点后面有其他数字的。不过,Python生成的列表即使是整数,后面也会加上.0,这样我就分不清哪些是整数,哪些不是。我不能用int()函数,因为那样会把所有数字都变成整数,这样我就会丢失原本是整数的那些数字。
这是我的代码:
z = 300
mylist = []
while(z > 1):
z = z - 1
x = 600851475143 / z
mylist.append(x)
print(mylist)
[y for y in mylist if y #insert rule to tell if it contains .0 here]
代码的第一部分是把600851475143这个数字依次除以300到1之间的每一个数字。然后我需要过滤这个列表,只保留整数。我已经有了一个过滤器,但在注释的地方,我需要一个规则来判断列表中的特定值是否有.0。
有没有办法做到这一点?
5 个回答
1
你可以使用 int()
这个函数,不过可能不是你想的那样。
z = 300
mylist = []
while(z > 1):
z = z - 1
x = 600851475143 / z
mylist.append(x)
print(mylist)
[y for y in mylist if y==int(y)]
4
你正在进行整数除法,所以结果自然都是整数。
即使你用 float(z)
来除,也可能会出现四舍五入的错误,所以检查结果是否为 .0
也不是个好主意。
也许你想要的是
if 600851475143 % z == 0:
mylist.append(600851475143/z)
这个叫做“取模运算符”,可以参考这个链接了解更多:http://docs.python.org/reference/expressions.html#binary-arithmetic-operations
编辑:Ralph 说得对,我没有把除法的结果放进列表里。现在看起来有点乱,因为重复了除法... :) gnibbler 的回答可能更好,或者 Ralph 的。
2
你可以使用 divmod() 函数,然后只把“整除”的结果放到你的列表里:
z = 300
mylist = []
while(z > 1):
z = z - 1
x,y = divmod(600851475143, z)
if y==0:
mylist.append(x)
print(mylist)