有没有一种既好又简单的方法来判断python列表(或numpy数组)中是否包含带有交替符号的数字?换句话说:
is_alternating_signs([1, -1, 1, -1, 1]) == True
is_alternating_signs([-1, 1, -1, 1, -1]) == True
is_alternating_signs([1, -1, 1, -1, -1]) == False发布于 2011-06-23 16:59:22
好的,感谢如此“相关”的特性。我找到了this question,并接受了ianalis的回答和lazyr的评论
def is_alternating_signs(a):
return numpy.all(numpy.abs(numpy.diff(numpy.sign(a))) == 2)
print is_alternating_signs([1, -1, 1, -1, 1])
print is_alternating_signs([-1, 1, -1, 1, -1])
print is_alternating_signs([1, -1, 1, -1, -1]) 输出为
True
True
False发布于 2011-06-23 17:00:25
你可以检查每个偶数成员都是负的,每个奇数成员都是正的,方法是从开头或位置1开始,每隔一项取一个切片。还要测试相反的情况以涵盖这两种可能性。
所以:
def is_alternating_signs(l):
return ( (all(x<0 for x in l[::2]) and all(x>=0 for x in l[1::2])) or
(all(x>=0 for x in l[::2]) and all(x<0 for x in l[1::2])))发布于 2011-06-23 17:10:31
使用decimal模块和is_signed方法:
from decimal import Decimal
a = [1, -1, 1, -1, 1]
b = [-1, 1, -1, 1, -1]
c = [1, -1, 1, -1, -1]
def is_alternating_signs(values):
lVals = [Decimal(val).is_signed() for val in values]
prevVal = lVals.pop(0)
for val in lVals:
if prevVal == val:
return False
prevVal = val
return True
is_alternating_signs(a)
is_alternating_signs(b)
is_alternating_signs(c)https://stackoverflow.com/questions/6451514
复制相似问题