在下面的代码中使用生成器,这是在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))
答案 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