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の依存関係です)を喜んで使用する場合、これは1つのライナーです:

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

HTH

于 2012-10-22T08:05:30.150 に答える
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 に答える
1

shstripped_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 に答える