运行长度(python)

运行长度(python),python,matplotlib,Python,Matplotlib,我应该创建一个列表,其中考虑正面或反面是否是连续的。。。即[H,H,H,T,T,H,H,T,T,H,T]=[3,2,2,1,1] 为什么这不起作用 from __future__ import print_function import numpy as np import matplotlib.pyplot as plt def run_lengths(n,p): tosses= np.random.choice(([True, False ]),p=[p,1-p], size=n)

我应该创建一个列表,其中考虑正面或反面是否是连续的。。。即[H,H,H,T,T,H,H,T,T,H,T]=[3,2,2,1,1] 为什么这不起作用

from __future__ import print_function
import numpy as np
import matplotlib.pyplot as plt
def run_lengths(n,p):
    tosses= np.random.choice(([True, False ]),p=[p,1-p], size=n)
    heads= True
    tails= False
    heads_counter = 0
    tails_counter=0
    runlist=[]
    rl=runlist
    for i in tosses:
        if True:
            heads_counter+=1
            if tosses[i+1]== False:
                rl.append(heads_counter)
                heads_counter=0
        elif False:
            tails_counter +=1
            if tosses[i+1]== True:
                rl.append(tails_counter)
                tails_counter=0
    print(runlist)
    print(tosses)
##print(run_lengths(10,.5))

你不需要单独的头尾计数器。只需使用一个变量来保存列表中的前一个元素,并将当前元素与之进行比较。如果相同,则递增计数器。如果不同,请将计数器附加到结果列表并重置计数器。在循环之后,附加最后一个计数器

另外,
如果为真:。。。elif False:
是胡说八道。将始终采用
True
分支。我猜你的意思是
如果I==True:
。或者如果i==heads:(您实际上从未使用
heads
tails
变量)


您是否正在寻找itertools.groupby(tows)中的g的
[len(list(g))
?对不起,我不知道您指的是什么导入itertools;然后运行代码,看看它是否提供了所需的信息。还有,如果只是计算连续的值,为什么还要使用单独的计数器?
import numpy as np
def run_lengths(n,p):
    tosses= np.random.choice(([True, False ]),p=[p,1-p], size=n)
    last_toss = tosses[0]
    counter = 1
    runlist = []
    for toss in tosses[1:]:
        if toss == last_toss:
           counter += 1
        else:
           runlist.append(counter)
           counter = 1
           last_toss = toss
    runlist.append(counter)     
    print(runlist)
    print(tosses)

run_lengths(15, .5)