使用Python查找列表中数字的偶数倍

使用Python查找列表中数字的偶数倍,python,python-2.7,Python,Python 2.7,我正在寻找最符合python的方法来检查列表中的一个或多个元素是否是具有预定义容差的预定义数字的偶数倍。下面给出了一个例子: myNumber=3.5 myList=[0,0.5,1,1.5,2,2.5,3,3.5,4,4.5,5,5.5,6,6.5,7,7.5,8,8.5,9,9.5] myTolerance=0.5 myResult=[0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0] 非常感谢您的任何建议。怎么样 from numpy import mod

我正在寻找最符合python的方法来检查列表中的一个或多个元素是否是具有预定义容差的预定义数字的偶数倍。下面给出了一个例子:

myNumber=3.5
myList=[0,0.5,1,1.5,2,2.5,3,3.5,4,4.5,5,5.5,6,6.5,7,7.5,8,8.5,9,9.5]
myTolerance=0.5

myResult=[0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0]
非常感谢您的任何建议。

怎么样

from numpy import mod, floor
withinTolAbove=[int(mod(number, myNumber) <= myTolerance and
                mod(floor(number / myNumber), 2) == 0) for number in myList]
withinTolBelow=[int(mod(number + myTolerance, myNumber) <= myTolerance and
                mod(floor((number + myTolerance) / myNumber), 2) == 0) for number in myList]
myResult=[max(i1, i2) * int(number > myTolerance) for i1, i2, number in zip(withinTolAbove, withinTolBelow, myList)]
print print([int(abs(x - round(x / myNumber) * myNumber) <= myTolerance and round(x / myNumber) > 1.5) for x in myList])
来自numpy导入模块,地板
withinTolAbove=[int(mod(number,myNumber)怎么样

from numpy import mod, floor
withinTolAbove=[int(mod(number, myNumber) <= myTolerance and
                mod(floor(number / myNumber), 2) == 0) for number in myList]
withinTolBelow=[int(mod(number + myTolerance, myNumber) <= myTolerance and
                mod(floor((number + myTolerance) / myNumber), 2) == 0) for number in myList]
myResult=[max(i1, i2) * int(number > myTolerance) for i1, i2, number in zip(withinTolAbove, withinTolBelow, myList)]
print print([int(abs(x - round(x / myNumber) * myNumber) <= myTolerance and round(x / myNumber) > 1.5) for x in myList])
来自numpy导入模块,地板
withinTolAbove=[int(mod(number,myNumber)怎么样

from numpy import mod, floor
withinTolAbove=[int(mod(number, myNumber) <= myTolerance and
                mod(floor(number / myNumber), 2) == 0) for number in myList]
withinTolBelow=[int(mod(number + myTolerance, myNumber) <= myTolerance and
                mod(floor((number + myTolerance) / myNumber), 2) == 0) for number in myList]
myResult=[max(i1, i2) * int(number > myTolerance) for i1, i2, number in zip(withinTolAbove, withinTolBelow, myList)]
print print([int(abs(x - round(x / myNumber) * myNumber) <= myTolerance and round(x / myNumber) > 1.5) for x in myList])
怎么样

from numpy import mod, floor
withinTolAbove=[int(mod(number, myNumber) <= myTolerance and
                mod(floor(number / myNumber), 2) == 0) for number in myList]
withinTolBelow=[int(mod(number + myTolerance, myNumber) <= myTolerance and
                mod(floor((number + myTolerance) / myNumber), 2) == 0) for number in myList]
myResult=[max(i1, i2) * int(number > myTolerance) for i1, i2, number in zip(withinTolAbove, withinTolBelow, myList)]
print print([int(abs(x - round(x / myNumber) * myNumber) <= myTolerance and round(x / myNumber) > 1.5) for x in myList])

你所说的“公差”是什么意思?换句话说,对于
2*3.5
你会接受7+/-0.5,对于
4*3.5
你会接受14+/-0.5,等等?(在
myList
myResult
中选择相应的项目对眼睛来说有点难。)如示例所示。如果一个元素仅偏离“实际”偶数倍数+/-预定义公差,则将其视为偶数倍数。您所说的“公差”是什么意思?换句话说,对于
2*3.5
您将接受7+/-0.5,对于
4*3.5
您将接受14+/-0.5,等等?(在
myList
myResult
中挑出相应的项目对眼睛来说有点难。)如示例所示。如果元素只偏离“实”值,则被视为偶数倍数甚至多个+/-一个预定义的公差。最初我也考虑过这样的事情,但它确实返回了错误的结果。它返回[1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0]0是3.5的偶数倍吗?我可以添加一个额外的条件来明确排除0,但它似乎符合一般定义。您希望负数也能得到一般处理吗?不……不幸的是,结果仍然与我的示例中的结果不一样。不,我想说0不是该数字的偶数倍。到目前为止,您的代码只允许一个pos正公差,但没有负数…负数在我的画布中不相关。是的,我刚刚更新,在下面搜索一次公差范围,然后在下面搜索一次公差范围。我认为它现在可以工作了。模数0问题。太棒了。只是添加了一个小编辑,稍微有点pythonic,并包括“0和负数不是偶数”条件。最初我也这样想,但它确实返回了错误的结果。它返回[1,1,0,0,0,0,0,0,1,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]而不是[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]返回[1,0,0,0,00是3.5的偶数倍吗?我可以添加一个额外的条件来明确排除0,但它似乎符合一般定义。您希望负数也能得到一般处理吗?不……不幸的是,结果仍然与我的示例中的结果不一样。不,我想说0不是该数字的偶数倍。到目前为止,您的代码只允许一个pos正公差,但没有负数…负数在我的画布中不相关。是的,我刚刚更新,在下面搜索一次公差范围内,在下面搜索一次公差范围内。我认为它现在可以工作了。模数0问题。太棒了。只是添加了一个小编辑,稍微有点pythonic,并包括“0和负数不是偶数“条件。