3

在我当前的 Python 项目中,我需要创建一些很长的整数列表以供以后在绘图中使用。目前我正在通过以下方式对此进行攻击:

volume_axis = []

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

此代码将附加到我的空白列表中,给我剥离标题中的第一个值 100 次,然后给我剥离标题中的下一个值 100 次等。

有没有更优雅和pythonesque的方式来完成这个?

4

4 回答 4

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)
于 2012-10-22T07:50:17.923 回答
2

这个问题有很多很好的 Pythonic 答案,但如果你乐于使用 numpy (无论如何这是 matplotlib 的依赖项),那么这是一个单行:

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

高温高压

于 2012-10-22T08:05:30.150 回答
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]
于 2012-10-22T07:54:07.653 回答
1

使用itertools

from itertools import chain, repeat
list(chain.from_iterable(repeat(int(n), 100) for n in sh))
于 2012-10-22T07:58:12.337 回答