想象我有一個這樣的名單得到從列表中N個元素在一個時間:Python的使用lambda
a = [1,2,3,4,5,6]
使用lambda函數,我想在同一時間返回兩個元素,所以其結果必然是:
res = [[1,2], [2,3], [3,4], [4,5], [5,6]]
有什麼建議嗎?
想象我有一個這樣的名單得到從列表中N個元素在一個時間:Python的使用lambda
a = [1,2,3,4,5,6]
使用lambda函數,我想在同一時間返回兩個元素,所以其結果必然是:
res = [[1,2], [2,3], [3,4], [4,5], [5,6]]
有什麼建議嗎?
>>> import itertools
>>> itertools.izip(a, itertools.islice(a,1,None))
這樣就避免了創建原始列表的副本,這可能是相關的,如果這是非常大的。
我推薦使用發生器。
>>> a = [1,2,3,4,5,6]
>>> g=([a[i:i+2]] for i in range(len(a)-1))
,如果你願意,你可以總是搶名單:
>>> list(g)
[[1, 2], [2, 3], [3, 4], [4, 5], [5, 6]]
一個選項:
a = [1, 2, 3, 4, 5, 6]
[a[i:i+2] for i in range(len(a)-1)] # => [[1, 2], [2, 3], [3, 4], [4, 5], [5, 6]]
>>> zip(a, a[1:])
[(1, 2), (2, 3), (3, 4), (4, 5), (5, 6)]
任意n
:
>>> n = 3
>>> zip(*(a[i:] for i in range(n)))
[(1, 2, 3), (2, 3, 4), (3, 4, 5), (4, 5, 6)]
不知道爲什麼這個人得到+3當它是一個元組列表... –
>>> map(lambda i:a[i:i+2], range(len(a)-1))
[[1, 2], [2, 3], [3, 4], [4, 5], [5, 6]]
相同我的其他答案(我剛剛刪除)。 +1使用lambda他要求 –
雖然它被問,這是一個非常糟糕的lambda使用。 – JBernardo
@JBernardo,我猜獎金是它可以與Python1.5一起使用:) –
爲什麼你需要使用lambda?這是功課嗎? –
可能的重複[你如何將一個列表分割爲Python中均勻大小的塊?](http://stackoverflow.com/questions/312443/how-do-you-split-a-list-into-evenly-sized-在Python中) – tzot