Random 如何计算数字序列
我要执行以下操作:我要输入1和0的“随机”序列。 然后我想对序列1的序列进行分析,得到这些序列的长度和数量,最后得到如下结果:序列中出现的所有长度n都有x个链。例如: 11011100011 ->有两条n=2('11'的链) 有一条n=3('111')的链 我能用计数功能实现吗?如果是,怎么做?如果没有,还有什么办法?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
我希望我的英语足够好,你能理解我的问题:)对不起,我在用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,其中键是我们计算的东西,值是我们计算的东西
看,没有循环,没有状态机,标准库做了很多事情。如他们所说,包括电池。您使用的是什么语言?请重新发布您的代码;缩进由于某种原因被破坏,导致代码无法运行。