【发布时间】:2014-05-25 05:53:11
【问题描述】:
假设我们有一个列表L = [1,2,3,4,5]。有没有一种干净的方法来制作以下形式的元组列表:T = [(1,2),(2,3),(3,4),(4,5)]?
如果有更好的替代品就好了
T = []
for i in range(len(L) - 1):
T.append((L[i], L[i+1]))
或等价的理解。
【问题讨论】:
标签: python
假设我们有一个列表L = [1,2,3,4,5]。有没有一种干净的方法来制作以下形式的元组列表:T = [(1,2),(2,3),(3,4),(4,5)]?
如果有更好的替代品就好了
T = []
for i in range(len(L) - 1):
T.append((L[i], L[i+1]))
或等价的理解。
【问题讨论】:
标签: python
你可以使用内置的zip函数:zip(L, L[1:])
In [4]: L = [1,2,3,4,5]
In [5]: zip(L, L[1:])
Out[5]: [(1, 2), (2, 3), (3, 4), (4, 5)]
【讨论】:
尝试:
list(zip(l[:-1], l[1:]))
应该这样做。
注意
list(zip(l, l[1:]))
也可以,因为 zip 会剪掉最长的人,但它不那么明确。
【讨论】:
使用列表理解的幼稚方法,这也可以,但我不确定使用 zip 是否更快。
L = [1,2,3,4,5]
[(L[i], L[i+1]) for i in range(len(L) - 1)]
【讨论】:
In [15]: L = [1,2,3,4,5]
In [16]: oL = [(x, y) for x, y in zip(L, L[1:])]
In [17]: oL
Out[17]: [(1, 2), (2, 3), (3, 4), (4, 5)]
或者干脆
oL = zip(L, L[1:])
【讨论】: