我应该创建一个列表,如果头或尾是连续的,它会考虑到它...即。 [H,H,H,T,T,H,H,T,T,H,T] = [3,2,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))
答案 0 :(得分:1)
您不需要单独的头部和尾部计数器。只需使用变量来保存列表的前一个元素,并将当前元素与它进行比较。如果相同,则递增计数器。如果不同,请将计数器附加到结果列表并重置计数器。在循环之后,追加最终的计数器。
另外,if True: ... elif False:
是胡说八道。始终会使用True
分支。我想你的意思是if i == True:
。或者if i == heads:
(您实际上从未使用heads
和tails
变量)。
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)