2017-07-28 13 views
0

私の悪い英語のために申し訳ありません。行列を使って文字列を動的にフォーマットする方法は?

だから、私は、たとえば、マトリックスと文字列をフォーマットしようとしている:

matrix = [ ['x', 'y', 'z'], ['u', 'v', 'w'], ['r', 's', 't'] ] 
string = "H{}ll{} W{}rld" 

行列がどれだけ「{}」によって生成される文字列を持っています。アイデアは().formatを使用して、文字列内の各 '{}' の行列の各列を使用することである。

string.format(*matrix) 

結果は:

H['x', 'y', 'z']ll['u', 'v', 'w'] W['r', 's', 't']rld 

だから最善の解決策であった:

for i in range(0, len(matrix[0])) : 
    for j in range(0, len(matrix[1])) : 
     for k in range(0, len(matrix[2])) : 
      print(string.format(matrix[0][i], matrix[1][j], matrix[2][k])) 

が、文字列とマトリックスは、このコードは無用作る変更することができるので、私はイテレータとして要素を使用するアレイを生成:

は、私は整形をした、イテレータの要素を反復処理する再帰的なコードを作った:

string.format(string.format(matrix[0][iterators[0]], matrix[1][iterators[1]], matrix[2][iterators[2]])) 

その後、私はフォーマットをdinamicallyしようとした:

string.format(*matrix[*iterators]) 

これは働いていません(無効な構文エラー)、この作業を行う方法はありますか?私はすべてがはっきりしていることを望むありがとう。文字列のリストを生成することによって

string.format(*[''.join(line) for line in matrix]) 

まず、あなたはフラット行列:

+0

に実装されていますか? "H ** xyz ** ll ** uvw ** W ** rst ** rld"? – EsotericVoid

+0

'print [string.format(* m)for m in matrix]' ---> '['Hxlly Wzrld'、 'Hullv Wwrld'、 'Hrlls Wtrld']'のようなものです。行列の長さが変化するときに動作します。 – davedwards

+0

これも試してみます –

答えて

1

をデカルト積と呼ばれ、美しくitertools

import itertools 

matrix = [ ['x', 'y', 'z'], ['u', 'v', 'w'], ['r', 's', 't'] ] 
string = "H{}ll{} W{}rld" 
for group in itertools.product(*matrix): 
    print(string.format(*group)) 
+1

本当にうまくいっていました!私はデカルト製品についてもっと調べるべきです –

1

あなたが "H XYZ LL UVW W RST RLD" として出力したいと仮定すると、あなたはこれを使用することができます['xyz', 'uvw', 'rst']の場合、このリストを*演算子で解凍して、format関数を使用できます。これは、ご希望の出力が何

+0

これは私が探していた結果ではありませんでしたが、興味深い答えをくれました。私は「for」がこの方法で使えると知っていませんでした:) –

関連する問題