0

このように見えるいくつかの関数からの出力(長いもの!)があります:

[[(0.0, 1.0, 2.0), (1.0, 2.0, 0.0), (2.0, 1.0, 0.0)], [(1.6324986294474886e-06, 1.000000272083105, 1.9999992744450537), (1.0, 1.9999985559929883, 9.626713411705526e-07), (1.9999957124111243, 1.000000714598146, 9.527975279416402e-07)], ......................, [(0.00016488526381860965, 1.0000274825531668, 1.9999267116402146), (0.9999999810184469, 1.9998541492231847, 9.723903843230245e-05), (1.9995669148822666, 1.000072183688789, 9.62532545797885e-05)]]

出力の構造は好きではありませんが、それを返す関数で使用すると非常に便利です。

しかし、私はこのように見えるように出力をフォーマットする必要があります:

0.0 1.0 2.0 A
1.0 2.0 0.0 B
2.0 1.0 0.0 C
1.6324986294474886e-06 1.000000272083105 1.9999992744450537 A
1.0 1.9999985559929883 9.626713411705526e-07    B
1.9999957124111243 1.000000714598146 9.527975279416402e-07  C

私はこのコードを持っています:

obj = 'A', 'B', 'C'
for n in results():    
    for z in range(len(results()[0])):
        k = n[z], obj[z]
        print '\t'.join(map(str, k))

('results' は大きなリストを返す関数の名前です)

それは私にこれを与えます:

(0.0, 1.0, 2.0) A
(1.0, 2.0, 0.0) B
(2.0, 1.0, 0.0) C
(1.6324986294474886e-06, 1.000000272083105, 1.9999992744450537) A
(1.0, 1.9999985559929883, 9.626713411705526e-07)    B
(1.9999957124111243, 1.000000714598146, 9.527975279416402e-07)  C

このコードの行末に文字 (A、B、または C) を追加しなければ、これを取得できます。

とにかく、あなたの助けを願っています!前もって感謝します!

予期しない問題...私は本当に出力を.csvファイルに書きたいので、印刷の代わりに使用します(今のところ、リストを使用して文字を追加するオプションを選択しました。私にはより明確です)

with open('table.csv', 'wb') as f:
     writer = csv.writer(f)
    for n in results():    
        for z in range(len(res[0])):
            k = list(n[z])
            k.append(obj[z])
            writer.writerows ('\t'.join(map(str, k)))

そして、それは実際には正しく機能しません。私はこれしか得られません:

0 
. 
0 
1 
. 
0 
2 
. 
0 
A
.
.
.

奇妙な書式設定が表示されるのに、印刷では表示されないのはなぜですか? 私にはかなり衝撃的です…

4

3 に答える 3

5

itertools常に長さが 3 になる場合は、モジュールを調べる必要があります。何かのようなもの:

import itertools
for num, letter in itertools.izip(itertools.chain.from_iterable(bigList), itertools.cycle('ABC')):
    print '%f\t%s' % (num, letter)

for z in range(len(results()[0])):また、結果関数を再実行してリスト全体を再計算するため、実際には を使用していないことを願っています。参考までに。

于 2012-04-27T19:24:54.343 に答える
1

完全なプログラム:

def results():
    return [[(0.0, 1.0, 2.0), (1.0, 2.0, 0.0), (2.0, 1.0, 0.0)], 
            [(1.6324986294474886e-06, 1.000000272083105, 1.9999992744450537),
             (1.0, 1.9999985559929883, 9.626713411705526e-07), 
             (1.9999957124111243, 1.000000714598146, 9.527975279416402e-07)], 
            [(0.00016488526381860965, 1.0000274825531668, 1.9999267116402146),
             (0.9999999810184469, 1.9998541492231847, 9.723903843230245e-05),
             (1.9995669148822666, 1.000072183688789, 9.62532545797885e-05)]]

obj = 'A', 'B', 'C'
for n in results():    
    for z in range(len(results()[0])):
        k = list(n[z])
        k.append(obj[z])
        print(','.join(map(str, k)))

出力:

0.0,1.0,2.0,A
1.0,2.0,0.0,B
2.0,1.0,0.0,C
1.63249862945e-06,1.00000027208,1.99999927445,A
1.0,1.99999855599,9.62671341171e-07,B
1.99999571241,1.0000007146,9.52797527942e-07,C
0.000164885263819,1.00002748255,1.99992671164,A
0.999999981018,1.99985414922,9.72390384323e-05,B
1.99956691488,1.00007218369,9.62532545798e-05,C

これは、python 2.5、2.6、2.7、および 3.2 で確認されました。

実装により、文字がリストに追加されます。(タプルは定数で変更できないため、リスト コンストラクターが必要です。)

于 2012-04-27T19:14:44.890 に答える
1

map 呼び出しの str への呼び出しを wee 関数の呼び出しに置き換えます。

def foo(lst):
    return ' '.join(map(str,lst))

obj = 'A', 'B', 'C'
for n in results():    
    for z in range(len(results()[0])):
        k = n[z], obj[z]
        print '\t'.join(map(foo, k))
于 2012-04-27T19:16:23.053 に答える