问题是关于体育编程。 我从stdin得到一个巨大的字符串,如果char等于'。',我必须为每个具有True值的字符创建一个字节的数组。否则为False值。同时,当我们有两个''时,我应该计算案例数量。'彼此靠近的符号。Python 3:在生成器中执行额外的计算
问题1:可以是发电机表达内部进行使用了发电机之后可访问一些额外的计算 - 求和,计数,更复杂的计算,以避免在创建的列表附加循环?
问题2:我可以访问生成器表达式中以前的循环结果吗?我尝试在一个生成器表达式中执行下面的第二个解决方案。
因为这是竞争,所以不能使用外部库。
1解决方案
res = 0: prev = False
s = bytearray()
for c in (c == '.' for c in 'a' + input() + 'a'):
res += c and prev
prev = c
s.append(c)
第二个解决方案
s = bytearray(c == '.' for c in 'a' + input() + 'a')
res = sum(map(all,zip(s[1:],s[:-1])))
UPD:与itertools.tee()第三解决方案 - 不幸的是这种解决方案比第一次更快,但比第二
i1,i2,i3 = tee((c == '.' for c in 'a' + input() + 'a'),3)
next(i1)
res = sum(a and b for a,b in zip(i1,i2))
s = bytearray(i3)
谢谢,我甚至没想到能够使用itertools在比赛:) –