如何计算数字序列

时间:2017-04-28 16:08:02

标签: random count numbers sequence counter

我想要做以下事情:我想输入"随机"顺序为1和0。 然后我想分析1的序列的这个序列,这样我就可以得到这些序列的长度和数量,最后得到的结果是:n中有n个链的x链。出现的所有长度n的序列。例如:

11011100011

- >有2个n = 2的链(' 11')    并且有1个n = 3的链(' 111')。

我可以通过计数功能实现吗?如果是这样,怎么样?如果没有,怎么回事? 我希望我的英语能够让你得到我的问题:)

2 个答案:

答案 0 :(得分:0)

抱歉,我使用的是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,你也永远不会创建一个“真正的”随机数,因此如果他们不得不每两位数字之间用逗号表示)

另一个问题:列表末尾有一个零,我该怎么改变呢?

答案 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})

这一切如何运作?

最奇怪的是groupby. It takes a sequence and cuts it into a sequence of pairs。每对是(值,相同值的序列)。序列是生成器,而不是列表,但为了简单起见,我在这里将它们显示为列表:

itertools.groupby('110011100011') ->
[('1', ['1', '1']), ('0', ['0', '0']), ('1', ['1', '1', '1']), ('0', ['0', '0', '0']), ('1', ['1', '1'])]

需要count函数来计算序列的长度。对于生成器,len不起作用。我们可以使用len(list(...)),但它会创建一个中间列表,在计算其项目后我们会丢弃它们。 Insted我选择生成1 s序列,源序列中的每个项目都有一个:(1 for _ in seq)此处_是有效的标识符;它通常代表“我不关心的价值”。

然后,使用list comprehension,我们将上面的对列表转换为长度列表,仅适用于包含'1' s(或实际what的序列等)。

现在Counter takes a sequence of values and counts the numbers of occurrences of each。这是我们最终需要的。它的界面就像dict一样,其中键是我们计算的东西,值是事物的数量。

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