运行长度(python)
我应该创建一个列表,其中考虑正面或反面是否是连续的。。。即[H,H,H,T,T,H,H,T,T,H,T]=[3,2,2,1,1] 为什么这不起作用运行长度(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)
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)