Python 检测和打印条纹

Python 检测和打印条纹,python,Python,我写了一些代码来检测数据中的条纹,我只是想知道为什么它不起作用 我有一个-1,0和1的序列。我想报告非零值的位置。但他们倾向于连续出现;因此,我不想只报告单个位置,而想报告连胜。下面是一个简单的例子: sequence=[-1,-1,0,0,1,1] print('Negative Influences:') streaking=False streak=[] for j in range(len(sequence)): if streaking==False and sequence

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

我有一个-1,0和1的序列。我想报告非零值的位置。但他们倾向于连续出现;因此,我不想只报告单个位置,而想报告连胜。下面是一个简单的例子:

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=[]
我希望得到以下输出:

Negative Influences: [0,1]
Positive Influences: [4,5]
不幸的是,我得到了空白:

Negative Influences:
Positive Influences:
为了调试,我尝试在每次迭代结束时添加一个打印(条纹)命令。它揭示了裸奔总是错误的。为什么呢?条纹应该在到达第一个-1(或分别为1)时变为真


感谢您找到了错误:我在条纹开始时将条纹设置为True时使用了==而不是=


很抱歉给您带来麻烦,您错误地写了==以将划线值从False更改为True,并将True更改为False,而您应该写==而不是==以分配或更改变量的值

错误

streaking==True

streaking=True

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

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

我不知道你说的条纹是什么意思。基本上,你需要负数和正数的索引,对吗?连续的-1或1。这个输出应该是什么?:
[-1,0,-1,0,1,1]
是的,负数和正数的索引,但以连行的形式报告。因此,如果我得到100个直接-1,我想将其作为单个区块而不是100个单独条目进行报告。例如,负面影响:[0][2]正面影响:[4,5]