2

テキスト データの行を読み取っていて、その行を値のリストに分割したいと考えています。たとえば、行には 4 つの数字があり、それぞれに 5 つのスペースが割り当てられているため、数字が 18、295、-9999、および 1780 の場合、元の行は次のようになります (^ 文字は行の開始と終了を示し、含まれていません)実際の入力データ):

^   18  295-9999 1780^

行を実際のコンポーネント値のリストに分割したい:

[18, 295, -9999, 1780]

リストに含める必要がある値の数を知っており (上の例では 4)、文字列内で各値が占めるスペースの正確な数も知っています (上の例では 5)。次のように、この分割を行うループを作成できます。

values = []
for i in range(4):
    values.append(line[i*5:5])

これを行うためのより効率的な、またはより「Pythonic」な方法はありますか?

よろしくお願いします。

4

2 に答える 2

8

スライスを使用して...

>>> [int(s[i:i+5]) for i in xrange(0, len(s), 5)]
[18, 295, -9999, 1780]

または - あなたが本当にしたいのであればre、もう少し読みやすいと思う人もいます... (参照用の代替としてこれを投げるだけです - 私を撃たないでください!)

>>> map(int, re.findall('.{5}', s))
[18, 295, -9999, 1780]
于 2012-11-01T17:17:14.087 に答える
1

別の可能な解決策は次のとおりです。

x = '   18  295-9999 1780'

def split_up(x):
    return map(int, x.replace('-', ' -').split())

結果

>>> split_up(x)
[18, 295, -9999, 1780]
于 2012-11-01T17:55:55.413 に答える