Random 如何计算数字序列

Random 如何计算数字序列,random,count,numbers,sequence,counter,Random,Count,Numbers,Sequence,Counter,我要执行以下操作:我要输入1和0的“随机”序列。 然后我想对序列1的序列进行分析,得到这些序列的长度和数量,最后得到如下结果:序列中出现的所有长度n都有x个链。例如: 11011100011 ->有两条n=2('11'的链) 有一条n=3('111')的链 我能用计数功能实现吗?如果是,怎么做?如果没有,还有什么办法? 我希望我的英语足够好,你能理解我的问题:)对不起,我在用Python 到目前为止,我已经做到了这一点,而且它正在发挥作用: from collections import

我要执行以下操作:我要输入1和0的“随机”序列。 然后我想对序列1的序列进行分析,得到这些序列的长度和数量,最后得到如下结果:序列中出现的所有长度n都有x个链。例如:

11011100011

->有两条n=2('11'的链) 有一条n=3('111')的链

我能用计数功能实现吗?如果是,怎么做?如果没有,还有什么办法?
我希望我的英语足够好,你能理解我的问题:)

对不起,我在用Python

到目前为止,我已经做到了这一点,而且它正在发挥作用:

    from collections import Counter

    a = [1,0,0,1,1,0,1,0,0,1,1,1,0,0,1,0,0,1,0]
    x=0
    h=0
    n_list=[]
    for x in range (0,len(a)):
        if (a[x]==1):
            h=h+1
         else: 
             if (h>0):
                n_list.append(h)
            h=0
        x=x+1
    print (n_list)


    counts = Counter (n_list)
    print (counts)
但现在我想能够写下: 10101010101010101010100作为字符串,并转换为如上所述的列表

(我想告诉一些人,即使你只是“随机”地敲打键1和0,你也永远不会创建一个“真实”的随机数,因此,如果他们必须在每两个数字之间键入一个逗号,那就太糟糕了)


另一个问题:列表末尾必须有一个零,我如何更改它?

下面是需要长注释的短代码

import collections
import itertools

def count(seq):
    # count the number of items in a sequence.
    return sum(1 for _ in seq)

def count_things(input_string, what):
    grouped = itertools.groupby(input_string)
    counts = [count(subseq) for (key, subseq) in grouped if key == what]
    return collections.Counter(counts)
现在试一试:

>>> one_counts = count_things('11100111101110110011', '1')
>>> print(one_counts)
Counter({2: 2, 3: 2, 4: 1})
长度为3的序列有多少个

>>> print one_counts[3]
2
如果需要,我们当然可以用它计算任何东西:

>>> print(count_things('aaabbccaaabaa', 'a'))
Counter({3: 2, 2: 1})
这一切是如何运作的

最奇怪的是。每对都是(值,相同值的序列)。序列是生成器,不是列表,但为了简单起见,我在这里将它们显示为列表:

itertools.groupby('110011100011') ->
[('1', ['1', '1']), ('0', ['0', '0']), ('1', ['1', '1', '1']), ('0', ['0', '0', '0']), ('1', ['1', '1'])]
需要使用
count
函数来计算序列的长度。对于发电机,
len
不起作用。我们可以只使用
len(list(…)
,但它创建了一个中间列表,我们在计算完它的项目后将其丢弃。相反,我选择生成一个
1
s序列,源序列中的每个项目一个:
(1表示序列中的u)
这里
\uu
是一个有效的标识符;它通常代表“我不在乎的价值”

然后,使用a,我们将上面的对列表转换为长度列表,仅适用于包含
'1'
s(或者实际上是
我们想要的内容)的序列

现在。这是我们最终需要的。它的界面类似于dict,其中键是我们计算的东西,值是我们计算的东西


看,没有循环,没有状态机,标准库做了很多事情。如他们所说,包括电池。

您使用的是什么语言?请重新发布您的代码;缩进由于某种原因被破坏,导致代码无法运行。