这是在Python中生成Thue-Morse序列的有效方法吗?

时间:2014-08-05 04:04:38

标签: python generator

在下面的代码中使用生成器,这是在Python中生成Thue-Morse sequence的有效方法吗?

# generate the Thue-Morse sequence
def genThueMorse():
    # initialize
    tms = '0'
    curr = 0
    while True:
        # generate next sequence
        if curr == len(tms):
            tmp = ''
            for i in range(len(tms)):
                if tms[i] is '0':
                    tmp += '1'
                else:
                    tmp += '0'
            tms += tmp
        yield tms[curr]
        curr +=1

以下是测试它的代码:

tms = koch.genThueMorse()
while True:
   print(next(tms))

3 个答案:

答案 0 :(得分:2)

这是简洁的,是高效的"?

import itertools

def genThueMorse():
    for n in itertools.count():
        yield (1 if bin(n).count('1')%2 else 0)

答案 1 :(得分:1)

我认为发电机效率相当高。我会选择这样的东西:

from itertools import count, izip

def genThueMorse():
    tms = [0]
    invert = [1, 0]
    for tm, curr in izip(tms, count()):
        yield str(tm)
        if curr == len(tms) - 1:
            tms += [invert[c] for c in tms]

答案 2 :(得分:1)

帮助补充其他答案:如果您只想计算序列中的第n位数,请使用:

lambda n: bin(n).count("1") % 2

或者更喜欢功能:

def calculate_nth(n):
  return bin(n).count("1") % 2

示例:

f = lambda n:  bin(n).count("1") % 2
f(0) # This will return 0
f(1) # This will return 1
f(2) # This will return 1
...
f(10) # This will return 0

可以通过以下顺序验证: 0 1 1 0 1 0 0 1 1 0 0 1 0 1 1 0