首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >检测交替符号

检测交替符号
EN

Stack Overflow用户
提问于 2011-06-23 16:49:38
回答 7查看 1.2K关注 0票数 5

有没有一种既好又简单的方法来判断python列表(或numpy数组)中是否包含带有交替符号的数字?换句话说:

代码语言:javascript
复制
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
EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2011-06-23 16:59:22

好的,感谢如此“相关”的特性。我找到了this question,并接受了ianalis的回答和lazyr的评论

代码语言:javascript
复制
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]) 

输出为

代码语言:javascript
复制
True
True
False
票数 7
EN

Stack Overflow用户

发布于 2011-06-23 17:00:25

你可以检查每个偶数成员都是负的,每个奇数成员都是正的,方法是从开头或位置1开始,每隔一项取一个切片。还要测试相反的情况以涵盖这两种可能性。

所以:

代码语言:javascript
复制
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])))
票数 3
EN

Stack Overflow用户

发布于 2011-06-23 17:10:31

使用decimal模块和is_signed方法:

代码语言:javascript
复制
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)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6451514

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档