2010-08-04 81 views
2

我有一个脚本可以创建一个数字列表,并且我想从列表中删除所有不是整数的数字(即,小数点后有零以外的任何数字)但是python会创建一个列表,甚至整个数字都会被放到最后,因此我不能用数字和其他任何东西区别开来。我不能使用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] 

的第一位刚好在转弯300和1之间的每一个数字除以600851475143。然后我需要过滤这个列表来获取只有整数的那个。我有一个过滤器,但在那里的评论是我需要一个规则,会告诉如果列表中的特定值有.0

这样可以实现的任何方式?

回答

2

可以使用divmod的(),只有把结果的“甚至分裂”中 列表:

z = 300 
mylist = [] 

while(z > 1): 
    z = z - 1 
    x,y = divmod(600851475143, z) 
    if y==0: 
     mylist.append(x) 

print(mylist) 
+0

我宁愿'商,余数= divmod ...'和'如果不是余数:' – hop 2010-08-04 10:54:02

4

你正在执行一个整数除法,所以你的结果无论如何都是整数。

即使您将除以float(z)代替,您也可能会遇到舍入错误的风险,因此检查.0不会是一个好主意。

也许你想要的是

if 600851475143 % z == 0: 
    mylist.append(600851475143/z) 

这就是所谓的“模运算符”,比照。 http://docs.python.org/reference/expressions.html#binary-arithmetic-operations

编辑:拉尔夫是对的,我没有把划分结果放入列表中。现在它看起来很丑,由于分裂的重复... :) gnibbler的回答可能是可取的,或拉尔夫的。

+0

他正在使用Python 3作为“print”调用显示,并且在Python 3中, /总是返回一个浮点数,而// // y返回floor(x/y)。除此之外,正确的。 – delnan 2010-08-04 10:01:33

+0

我认为@Ralph是正确的:)因此,应该是'mylist.append(600851475143/z)'。 – delnan 2010-08-04 10:11:57

0

使用regular expressions来匹配你所需要的。在你的情况下,应该在字符串的末尾检查“.0”,因此re.search("\.0$", y)。请注意,您应该使用re.search,因为re.match只检查字符串开头的匹配项。

编辑:对不起,我是用不过

蟒蛇失望创建列表,其中甚至 整数得到0.0

,并认为你正在它的字符串列表。豆豆给你答案。

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)] 
0

豆形软糖的答案是相当不错的,所以我想总结一下:

magic_num = 600851475143 
filtered_list = [magic_num/i for i in range(300,0,-1) if magic_num%i == 0] 

(该分部运算符应该是整数//,但代码着色器将其解释为注释,因此我已经留下了单斜杠)

相关问题