0

私は3つの異なる区切り文字を持つデータ(以下)を持っています(最初の数字にはスペースがあり、2番目の3つのスペースは数字に、最後の列にはスペースがあり、次に数字にタブがあります)、生成できるようにしたいです各列の連続した値を含むリスト。

 8000.5   16745     0.1257
 8001.0   16745     0.1242
 8001.5   16745     0.1565
 8002.0   16745     0.1595
 8002.5   16745     0.1093
 8003.0   16745     0.1644

私はreでいくつかのことを試しました。文字列に変換した後、この方法で解析できるかどうかを確認しましたが、変換するのに少し時間がかかり、誰かがより簡単な方法を知っているかどうか疑問に思っていました. 理想的な出力は

list 1 = [8000.5, 8001.0, 8001.5 ...]
list 2 = [16745, 16745, 16745, ...]
list 3 = [0.1257, 0.1242, 0.1565, ...]

ありがとう!

4

4 に答える 4

1

使用するsplit()

strs = """ 8000.5   16745     0.1257
 8001.0   16745     0.1242
 8001.5   16745     0.1565
 8002.0   16745     0.1595
 8002.5   16745     0.1093
 8003.0   16745     0.1644"""

list_col= map(list,zip(*(map(float,x.split()) for x in strs.split('\n'))))

print(list(list_col))

出力:列のリストのリスト

[[8000.5, 8001.0, 8001.5, 8002.0, 8002.5, 8003.0], [16745.0, 16745.0, 16745.0, 16745.0, 16745.0, 16745.0], [0.1257, 0.1242, 0.1565, 0.1595, 0.1093, 0.1644]]
于 2012-05-29T16:27:11.263 に答える
1

.split();を使用するだけです。任意の量の空白を取り、その上で分割します (先頭と末尾の空白を完全に無視します)。

>>> ex = ' 8000.5   16745     0.1257'
>>> ex.split()
['8000.5', '16745', '0.1257']

文字列の代わりに浮動小数点数が必要な場合は、次float()を使用して各値に適用するだけmapです。

>>> ex = ' 8000.5   16745     0.1257'
>>> map(float, ex.split())
[8000.5, 16745.0, 0.1257]
于 2012-05-29T16:25:04.810 に答える
0

それを行うさらに別の方法(sは最初の文字列です):

>>> [map(float, col) for col in zip(*map(str.split, s.splitlines()))]
[[8000.5, 8001.0, 8001.5, 8002.0, 8002.5, 8003.0],
 [16745.0, 16745.0, 16745.0, 16745.0, 16745.0, 16745.0],
 [0.1257, 0.1242, 0.1565, 0.1595, 0.1093, 0.1644]]
于 2012-05-29T17:19:05.183 に答える
0
txt = """ 8000.5   16745     0.1257
 8001.0   16745     0.1242
 8001.5   16745     0.1565
 8002.0   16745     0.1595
 8002.5   16745     0.1093
 8003.0   16745     0.1644 """

data = zip(*((float(s) for s in row.split()) for row in txt.split('\n')))

結果は

[(8000.5, 8001.0, 8001.5, 8002.0, 8002.5, 8003.0),
 (16745.0, 16745.0, 16745.0, 16745.0, 16745.0, 16745.0),
 (0.1257, 0.1242, 0.1565, 0.1595, 0.1093, 0.1644)]
于 2012-05-29T16:29:02.590 に答える