我想enumerate
類似功能迭代器產生(previous_element, current_element)
對。也就是說,考慮到iter
是大多數pythonic的方式來獲得以前的元素
i0, i1, i1, ...
我想offset(iter)
產生
(None, i0), (i0, i1), (i1, i2) ...
我想enumerate
類似功能迭代器產生(previous_element, current_element)
對。也就是說,考慮到iter
是大多數pythonic的方式來獲得以前的元素
i0, i1, i1, ...
我想offset(iter)
產生
(None, i0), (i0, i1), (i1, i2) ...
最佳答案我有(這需要itertools
)是
def offset(iter, n=1):
# returns tuples (None, iter0), (iter0, iter1), (iter1, iter2) ...
previous = chain([None] * n, iter)
return izip(previous, iter)
,但我會感興趣的是看看是否有人有單線(或者比這個功能更好的名字)!
def pairwise(iterable):
"""s -> (s0,s1), (s1,s2), (s2, s3), ...
see http://docs.python.org/library/itertools.html
"""
a, b = itertools.tee(iterable)
b.next()
return itertools.izip(a, b)
編輯移動文檔字符串到函數
要放在桌子上更itertools:
from itertools import tee, izip, chain
def tee_zip(iterable):
a, b = tee(iterable)
return izip(chain([None], a), b)
+1我喜歡這個。 – jamylak
def offset(iter, n=1, pad=None):
i1, i2 = itertools.tee(iter)
i1_padded = itertools.chain(itertools.repeat(pad, n), i1)
return itertools.izip(i1_padded, i2)
@bpgergo + @ user792036 =此。最好的兩個世界:)。
沒有「最pythonic」的方式。你會看到「更多pythonic」的方式(例如,使用函數而不是帶有兩個工廠類的類來創建第一類),但是「pythonic」是一個主觀的想法。 –
點擊其中一個答案接受它。 – lockstock