我正在編寫一個函數來生成n個布爾值的列表。假設返回的列表是[True, False, True, True, False]
。我需要根據布爾值生成列表,以識別相同值的條紋。所以在這種情況下的結果將是[1, 1, 2, 1]
。出於某種原因,我的代碼不包含上次運行。在提供的例子中,我的產品會產生[1, 1, 2]
。我似乎無法弄清楚爲什麼會發生這種情況,以及如何解決這個問題。提前致謝!Python函數不會將最後一個值附加到列表中
#Makes list of bools
def bools(p, n):
return (rand(n) < p)
#Makes list that counts successive values
def succession(p, n):
run = bools(p, n)
print run
successionlist = []
counter = 1
for j in range(1, n):
if run[j] == run[j - 1]:
counter = counter + 1
else:
successionlist.append(counter)
print successionlist
counter = 1
旁白:你可能會感興趣的[ 'itertools.groupby'](http://docs.python.org/2/library/itertools.html#itertools.groupby);你的代碼會變成類似於'[sum(1 for for g)for k,g in groupby(run)]''。 – DSM