【发布时间】:2019-05-25 22:00:58
【问题描述】:
我有这份清单
list=[0,1,2,3,4,2,6]
我想制作另一个这样的元组列表:
list=[(0,1),(1,2),(2,3),(3,4),(4,2),(2,6)]
有没有我可以使用的内置函数?
【问题讨论】:
我有这份清单
list=[0,1,2,3,4,2,6]
我想制作另一个这样的元组列表:
list=[(0,1),(1,2),(2,3),(3,4),(4,2),(2,6)]
有没有我可以使用的内置函数?
【问题讨论】:
您可以使用 zip 和列表理解。 listt[1:] 从第二个元素开始。这样做是因为在你的第一对中,你有第一个和第二个元素。 zip 创建对,然后迭代它们并使用 () 将它们存储为元组。
一条建议:不要使用内置名称作为变量。 list 在你的情况下。
listt=[0,1,2,3,4,2,6]
result = [(i) for i in zip(listt, listt[1:])]
# [(0, 1), (1, 2), (2, 3), (3, 4), (4, 2), (2, 6)]
基准性能
根据@prashant rana 的评论,我将zip 的性能与他的方法进行了比较,列表比原始列表长100 万 倍。以下是结果:zip 原来更快
import timeit
listt=[0,1,2,3,4,2,6]*1000000
%timeit [(listt[i],listt[i+1]) for i in range(len(listt)-1)]
%timeit [(i) for i in zip(listt, listt[1:])]
1.76 s ± 178 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
937 ms ± 46.6 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
【讨论】:
zip 比你的方法快
zip 确实更快。
[(i, list[idx + 1]) for idx, i in enumerate(list) if idx < len(list) - 1]
[(0, 1), (1, 2), (2, 3), (3, 4), (4, 2), (2, 6)]
【讨论】:
没有内置函数,但是 python 可以很容易地制作你自己的函数。给你:
list = [0, 1, 2, 3, 4, 2, 6]
x = [(list[i], list[i+1]) for i in range(len(list)-1)]
【讨论】: