我有一个脚本可以创建一个数字列表,我想从列表中删除所有不是整数的数字(即小数点后面有除零之外的任何数字)但是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
这有什么办法可以实现吗?
答案 0 :(得分:4)
您正在执行整数除法,因此无论如何您的结果都将为整数。
即使您除以float(z)
,也有可能会出现舍入错误,因此检查.0
无论如何都不是一个好主意。
也许你想要的是
if 600851475143 % z == 0:
mylist.append(600851475143/z)
它被称为“模运算符”,参见http://docs.python.org/reference/expressions.html#binary-arithmetic-operations
编辑:拉尔夫是对的,我没有将分区结果列入清单。现在它看起来很难看,因为重复划分...... :) gnibbler的答案可能更可取,或者是拉尔夫的。答案 1 :(得分:2)
您可以使用divmod()并仅将“偶数除”的结果放入 你的清单:
z = 300
mylist = []
while(z > 1):
z = z - 1
x,y = divmod(600851475143, z)
if y==0:
mylist.append(x)
print(mylist)
答案 2 :(得分: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)]
答案 3 :(得分:0)
使用regular expressions来匹配您需要的内容。在您的情况下,应检查字符串末尾的“.0”,即re.search("\.0$", y)
。请注意,您应该使用re.search,因为re.match仅检查字符串开头的匹配项。
编辑:对不起,我对
感到很失望然而python创建列表在哪里 甚至整数都得到.0
并认为你正在制作字符串列表。 jellybean给了你答案。
答案 4 :(得分:0)
jellybean的答案非常好,所以我总结一下:
magic_num = 600851475143
filtered_list = [magic_num/i for i in range(300,0,-1) if magic_num%i == 0]
(除法运算符应为整数//
,但代码着色器将其解释为注释,因此我留下了单斜杠)