如何判断列表中的项目是否包含某些字符

时间:2010-08-04 09:53:46

标签: python

我有一个脚本可以创建一个数字列表,我想从列表中删除所有不是整数的数字(即小数点后面有除零之外的任何数字)但是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 个答案:

答案 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]

(除法运算符应为整数//,但代码着色器将其解释为注释,因此我留下了单斜杠)