1

私は通常のプログラミングの意味では些細な問題を抱えていますが、可能であればいくつかのPythonトリックを使用してこれを行うための別の解決策を見つけたいと思います。

私は次のようなテキストファイルを持っています:

A1 1 5 g1_0 10
A1 6 8 g2_0 13
A1 9 12 g3 18
A1 15 24 g4 2
A1 25 27 g5 5
A1 30 33 g1_1 20
A1 44 67 g10 19
A1 69 77 g9 19
A1 80 99 g6 19
A1 153 166 g2_1 19

私がやりたいのは、次の方法でテキストファイルをフィルタリングすることです。列4に「_0」または「_1」または「_2」がある場合、列5をチェックします。列5の番号が最も大きい場合i 「_」で他のすべてを削除し、スコアの高いものだけを保持したい。

PS:列4の値ごとに、スコアが最も高いものを保持したい。たとえば、この場合、これらの値は残ります。すべての比較に対してすべてではありませんが、「_0」「_1」を持つ各ペアまたはトリプレット「_2」は、最高のスコアを得るために単独で比較する必要があります。

A1 9 12 g3 18
A1 15 24 g4 2
A1 25 27 g5 5
A1 30 33 g1_1 20
A1 44 67 g10 19
A1 69 77 g9 19
A1 80 99 g6 19
A1 153 166 g2_1 19

とにかく多くをループせずにこれを行うことはありますか?

4

1 に答える 1

1
import numpy as np
nk=np.genfromtxt('input.txt', dtype=None)
result1={}
for x in nk:
    result1.setdefault(x[3].split('_')[0],[]).append(x[4])
for x in nk:
    if x[4]==max(result1[x[3].split('_')[0]]):print x

出力:

('A1', 9, 12, 'g3', 18)
('A1', 15, 24, 'g4', 2)
('A1', 25, 27, 'g5', 5)
('A1', 30, 33, 'g1_1', 20)
('A1', 44, 67, 'g10', 19)
('A1', 69, 77, 'g9', 19)
('A1', 80, 99, 'g6', 19)
('A1', 153, 166, 'g2_1', 19)
于 2013-03-25T11:18:19.423 に答える