lis的克隆元素

2024-04-23 06:23:20 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我有一个Python列表,如下所示:

list = [ a, b, c, d]

我正在寻找最有效的方式来实现这一点:

^{pr2}$

因此,如果列表有N个元素,那么第一个元素被克隆N-1次,第二个元素被克隆N-2次,依此类推……最后一个元素被克隆N-N次或0次。关于如何在大名单上有效地做到这一点的任何建议。在


Tags: 元素列表方式建议list名单pr2
3条回答
>>> items = ['a', 'b', 'c', 'd']

>>> [item for i, item in enumerate(items) for j in xrange(len(items) - i)]
['a', 'a', 'a', 'a', 'b', 'b', 'b', 'c', 'c', 'd']

首先,我们使用enumerate同时提取索引和值。然后我们使用一个嵌套的for循环,以减少对每个项的迭代次数。(请注意,变量j从未使用过。它是垃圾。)

由于使用了enumeratexrange生成器,这应该是接近最佳的,内存使用量最小。在

请注意,我测试的是速度,而不是正确性。如果有人想在单元测试中进行编辑,我会尽力的。在

pyfunc_fastest: 152.58769989 usecs
pyfunc_local_extend: 154.679298401 usecs
pyfunc_iadd: 158.183312416 usecs
pyfunc_xrange: 162.234091759 usecs
pyfunc: 166.495800018 usecs
Ignacio: 238.87629509 usecs
Ishpeck: 311.713695526 usecs
FabrizioM: 456.708812714 usecs
JohnKugleman: 519.239497185 usecs
Bwmat: 1309.29429531 usecs

测试代码here。第二次修订是垃圾,因为我正赶着让每个人都在我第一批测试后发布的测试。这些时间安排适用于第五次修订的规范。在

这是我能得到的最快版本。在

^{pr2}$

奇怪的是,我修改了一个版本,用enumerate来避免索引到列表中,它的运行速度比原来的慢。在

这个怎么样-一个简单的

>>> x = ['a', 'b', 'c', 'd']
>>> t = []
>>> lenList = len(x)
>>> for l in range(0, lenList):
...     t.extend([x[l]] * (lenList - l))
... 

>>> t
['a', 'a', 'a', 'a', 'b', 'b', 'b', 'c', 'c', 'd']
>>> 

相关问题 更多 >