复制列表中的每个成员 - python

时间:2010-03-15 17:21:36

标签: python list

我想编写一个恢复列表[1,5,3,6,...]的函数 并给出[1,1,5,5,3,3,6,6,...] 任何想法怎么做? 感谢

11 个答案:

答案 0 :(得分:47)

>>> a = range(10)
>>> [val for val in a for _ in (0, 1)]
[0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9]

N.B。 _传统上用作占位符变量名,您不希望对变量的内容执行任何操作。在这种情况下,它仅用于为外循环每次生成两个值。

要将其从列表转换为生成器,请用方括号替换方括号。

答案 1 :(得分:14)

>>> a = [1, 2, 3]
>>> b = []
>>> for i in a:
    b.extend([i, i])


>>> b
[1, 1, 2, 2, 3, 3]

>>> [a[i//2] for i in range(len(a)*2)]
[1, 1, 2, 2, 3, 3]

答案 2 :(得分:8)

如果您已经拥有itertools文档中描述的roundrobin食谱 - 并且它非常方便 - 那么您可以使用

roundrobin(my_list, my_list)

答案 3 :(得分:8)

我会使用zipitertools.chain

>>> import itertools
>>> l = [1,5,3,6,16]
>>> list(itertools.chain(*zip(l,l)))
[1, 1, 5, 5, 3, 3, 6, 6, 16, 16]

注意:我只使用list来使用生成器以使其适合打印。您可能不需要在代码中调用list ...

答案 4 :(得分:5)

稍加切片...

>>> a = [3, 1, 4, 1, 5]
>>> a[:0] = a[::2] = a[1::2] = a[:]
>>> a
[3, 3, 1, 1, 4, 4, 1, 1, 5, 5]

答案 5 :(得分:3)

numpy.repeat执行您想要的操作:

import numpy as np
yourList = [1,5,3,6]
n = 2
list(np.repeat(yourList, n))

结果:

[1, 1, 5, 5, 3, 3, 6, 6]

如果您不介意使用numpy数组,也可以省略最后一行中的list()调用。

答案 6 :(得分:2)

我会用

import itertools
foo = [1, 5, 3, 6]
new = itertools.chain.from_iterable([item, item] for item in foo)

new将是一个懒惰地迭代重复项的迭代器。如果您需要计算实际列表,可以list(new)或使用其他解决方案之一。

答案 7 :(得分:2)

一个人可以使用zip压缩列表

a = [3, 1, 4, 1, 5]
sum(zip(a,a), ())   # (3, 3, 1, 1, 4, 4, 1, 1, 5, 5)

输出是一个元组,但是转换为列表很容易。 关于使用sum使元组扁平化,请参见https://stackoverflow.com/a/952946/11769765python: flat zip

答案 8 :(得分:1)

尽管Guido不喜欢功能操作员,但他们可以非常方便:

>>> from operator import add
>>> a = range(10)
>>> b = reduce(add, [(x,x) for x in a])

答案 9 :(得分:1)

对于更通用的方法,您可以使用列表理解和因子项。

示例

sample_list = [1,2,3,4,5]
factor = 2
new_list = [entry for entry in sample_list for _ in range(factor)]

出:

>>> new_list
[1, 1, 2, 2, 3, 3, 4, 4, 5, 5]

更改 factor 变量将更改列表中每个项目在新列表中的条目数。

您也可以将其包装在一个函数中:

def multiply_list_entries(list_, factor = 1):

    list_multiplied = [entry for entry in list_ for _ in range(factor)]
    return list_multiplied

>>> multiply_list_entries(sample_list, factor = 3)
[1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4, 5, 5, 5]

答案 10 :(得分:0)

可以使用列表乘法。如果需要每个列表成员,只需使用排序方法。

>>> lst = [1,2,3,4]
>>> sorted(lst*2)
[1,1,2,2,3,3,4,4]