問題是關於體育編程。 我從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在比賽:) –