gpt4 book ai didi

python - 根据长度重复列表列表的第一个元素

转载 作者:行者123 更新时间:2023-11-28 21:16:15 33 4
gpt4 key购买 nike

我有一个 Python 列表列表:

l = [[1, 2, 3], [4], [5, 6], [7, 8, 9, 10]]

我想要的是根据列表的长度重复每个列表的第一个元素:

result = [1, 1, 1, 4, 5, 5, 7, 7, 7, 7]

我可以使用列表理解来实现这一点,但我的列表很长,所以方法很慢:

result = [[x[0]]*len(x) for x in l]

[[1, 1, 1], [4], [5, 5], [7, 7, 7, 7]]

尽管如此,这仍然会返回列表的列表而不是平面列表。因此,我试图找出根据上述标准创建该平面列表的最快方法。

更新:我想要执行速度最快的方法,因为列表很长

最佳答案

您可以使用 itertools.chain压平你的结果。

import itertools
l = [[1, 2, 3], [4], [5, 6], [7, 8, 9, 10]]
res = list(itertools.chain(*[[i[0]]*len(i) for i in l]))
print (res)

产量:

[1, 1, 1, 4, 5, 5, 7, 7, 7, 7]

根据@PadraicCunningham的建议,可以使用itertools.chain.from_iterable,比较起来比itertools.chain快。

import timeit
case1 = lambda: list(itertools.chain(*[[i[0]]*len(i) for i in l]))
case2 = lambda: list(itertools.chain.from_iterable([[i[0]]*len(i) for i in l]))

print ("time required by Case1 to execute :", timeit.timeit(case1))
print ("time required by Case1 to execute :", timeit.timeit(case2))

显示两种情况的时间报告:

time required by Case1 to execute : 4.83640388816
time required by Case1 to execute : 4.68654976762

关于python - 根据长度重复列表列表的第一个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28988544/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com