2012-10-22 82 views
3

在我当前的Python项目中,我需要创建一些长整型列表供以后在绘图中使用。目前,我在下面的方式攻击这一点:Python - 创建图案列表

volume_axis = [] 

for values in stripped_header: 
    for doses in range(100): 
     volume_axis.append(int(values)) 

此代码将附加到我的空白列表,让我在剥去头的第一个值的100倍,那么下一个值剥离头100倍等

是否有一个更优雅和pythonesque的方式来实现这一目标?

回答

3
for values in stripped_header: 
    volume_axis += [int(values)] * 100 

或使用itertools(可能更有效)

from itertools import repeat 
for values in stripped_header: 
    volume_axis += repeat(int(values), 100) 
1

考虑sh代表stripped_header

In [1]: sh = [1,2,3,4] 

In [2]: [x for x in sh for y in [sh]*5] 
Out[2]: [1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4] 

,或者您也可以去为便于理解

In [3]: [x for x in sh for y in range(5)] 
Out[3]: [1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4] 
+0

你正在使用'它在这里被定义之前 –

+0

@gnibbler y':更新了答案 – avasal

+0

'[SH] * 5'有点不透明,不'范围(5)'更可以理解的? –

1

使用itertools

from itertools import chain, repeat 
list(chain.from_iterable(repeat(int(n), 100) for n in sh)) 
2

已经有一些很好的Python的回答这个问题的,但如果你乐于使用numpy的(这是matplotlib的依赖反正),那么这是一个班轮:

>>> import numpy 
>>> stripped_header = [1, 2, 4] 
>>> 
>>> numpy.repeat(stripped_header, 3) 
array([1, 1, 1, 2, 2, 2, 4, 4, 4]) 

HTH

+0

我在想那个...如果OP使用numpy很开心,那么这就是要走的路 –