以下を使用して、ファイル全体の内容をリストに分割できます。
def read_data(filename):
with open(filename) as f:
return f.read().split()
data = read_data('test.txt')
以下を含むを使用して実行text.txt
:
10
20
30
e
11
21
31
e
12
22
32
結果は次のとおりです。
data = ['10', '20', '30', 'e', '11', '21', '31', 'e', '12', '22', '32']
注:正しく処理test.txt
されるように、スペース、タブ、および改行を使用してフォーマットできます。split()
データは、'e' エントリを含まない 2D 配列にある必要があります。これは、次を使用して実行できます。
def list_to_grid(data):
ret = []
line = []
for entry in data:
if entry == 'e':
if len(line) != 0:
ret.append(line)
line = []
else:
line.append(int(entry))
if len(line) != 0:
ret.append(line)
return ret
注: これを行うにはもっと Pythonic な方法があると思いますが、うまくいきます。
ファイルで実行data = list_to_grid(read_data('test.txt'))
すると、次のようになります。text.txt
data = [[10, 20, 30], [11, 21, 31], [12, 22, 32]]
あなたがしているのは、2D配列の転置です。つまり、与えられたdata[i][j]
、それは新しい位置 を持っていdata[j][i]
ます。これで、このデータを転置して目的のシーケンスを取得できます。
def transpose(data):
ret = []
for i in range(0, len(data)):
ret.append([data[j][i] for j in range(0, len(data[i]))])
return ret
どちらがtdata = transpose(data)
与えます:
data = [[10, 20, 30], [11, 21, 31], [12, 22, 32]]
tdata = [[10, 11, 12], [20, 21, 22], [30, 31, 32]]
今すぐ印刷してください:
def print_data(data):
for line in data:
print ' '.join([str(x) for x in line])
使用print_data(tdata)
すると、次の結果が得られます。
10 11 12
20 21 22
30 31 32
それはあなたが望んでいたものです。