我有一个列表L = [1,2,3,4,5,6]
,我需要按如下方式检索对:
[1,2] , [2,3], [3,4], [4,5], [5,6]
我目前的解决方案是创建两个实用程序列表:
U1 = [1,2,3,4,5]
U2 = [2,3,4,5,6]
使用zip
内置函数来获得所需的结果。
有没有更好的方法来实现同样的目标?
答案 0 :(得分:3)
这就像你的实用程序列表的解决方案,但有点短:
L = [1,2,3,4,5,6]
for i in zip(L, L[1:]):
print(list(i))
# [1, 2]
# [2, 3]
# [3, 4]
# [4, 5]
# [5, 6]
这可以正常工作,因为zip
会在一次迭代耗尽后立即停止。
您还可以使用map
立即转换项目:
for i in map(list, zip(L, L[1:])):
print(i)
或者如果您希望将整个事物转换为列表列表:
list(map(list, zip(L, L[1:])))
# [[1, 2], [2, 3], [3, 4], [4, 5], [5, 6]]
如果您的列表真的很长,创建一个新列表(因为我用[1:]
切片)可能会很昂贵,那么您可以使用itertools.islice
来避免这种情况:
for i in zip(L, islice(L, 1, None)):
print(list(i))
答案 1 :(得分:1)
使用列表理解:
[[L[i], L[i+1]] for i in range(len(L)-1)]
通常,列表推导将比python
中的for循环快得多