首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >检测和打印条纹

检测和打印条纹
EN

Stack Overflow用户
提问于 2019-09-11 16:47:44
回答 3查看 44关注 0票数 0

我写了一些代码来检测数据中的条纹,我只是想知道为什么它不工作。

我得到了-1,0和1的序列。我想报告一下非零值的位置。但它们往往是以条纹的形式出现的;因此,我想要报告的不是单个位置,而是条纹。下面是一个简单的例子:

代码语言:javascript
复制
sequence=[-1,-1,0,0,1,1]

print('Negative Influences:')
streaking=False
streak=[]
for j in range(len(sequence)):
    if streaking==False and sequence[j]==-1:
        streaking==True
        streak.append(j)
    elif streaking==True and sequence[j]==-1:
        streak.append(j)
    elif streaking==True and sequence[j]!=-1:
        streaking==False
        print(streak)
        streak=[]

print('Positive Influences:')
streaking=False
streak=[]
for j in range(len(sequence)):
    if streaking==False and sequence[j]==1:
        streaking==True
        streak.append(j)
    elif streaking==True and sequence[j]==1:
        streak.append(j)
    elif streaking==True and sequence[j]!=1:
        streaking==False
        print(streak)
        streak=[]

我希望得到以下输出:

代码语言:javascript
复制
Negative Influences: [0,1]
Positive Influences: [4,5]

不幸的是,我得到了空白:

代码语言:javascript
复制
Negative Influences:
Positive Influences:

为了进行调试,我尝试在每次迭代的末尾添加一个打印(条纹)命令。它揭示了裸奔总是错误的。为什么会这样呢?裸奔应该在达到第一个-1 (或分别为1 )时变为True。

谢谢

EN

回答 3

Stack Overflow用户

发布于 2019-09-11 17:07:11

发现错误:当在条纹开始时将streaking设置为True时,我使用==而不是=。

很抱歉给您添了麻烦

票数 0
EN

Stack Overflow用户

发布于 2019-09-11 17:10:26

错误地,您编写了用于将条纹值从False更改为True并将True更改为False的==,而您应该为赋值或更改变量的值编写=而不是==

错误的

代码语言:javascript
复制
streaking==True

Right

代码语言:javascript
复制
streaking=True
票数 0
EN

Stack Overflow用户

发布于 2019-09-11 17:13:39

既然你知道你的代码出了什么问题,我建议用另一种简单的方法在一次迭代中完成这项工作:

代码语言:javascript
复制
from itertools import groupby

sequence = [-1,0,-1,-1,-1,-1,-1,-1,-1,-1,0,0,1,1,1,1]

pos, neg = [], []
cnt = 0

for k, g in groupby(sequence):
    g = list(g)
    if k == -1 and len(g) == 1:
        neg.append(cnt)
    elif k == -1 and len(g) > 1:
        neg.append([cnt, cnt + len(g) - 1])
    elif k == 1 and len(g) == 1:
        pos.append(cnt)
    elif k == 1 and len(g) > 1:
        pos.append([cnt, cnt + len(g) - 1])
    cnt += len(g)

print(neg)  # [0, [2, 9]]
print(pos)  # [[12, 15]]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57885415

复制
相关文章

相似问题

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