如何使用矩阵动态格式化字符串?

时间:2017-07-28 22:39:54

标签: python matrix

抱歉我的英语不好。

所以,我正在尝试使用矩阵格式化字符串,例如:

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]))

但是字符串和矩阵可以改变使得这段代码无用,所以我生成了一个数组来使用元素作为迭代器:

iterators = [0] * len(matrix)

然后我做了一个递归代码迭代迭代器中的元素,格式化:

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

然后我尝试以dinamically格式:

string.format(*matrix[*iterators])

这不起作用(语法错误无效),有什么方法可以使这项工作?我希望一切都清楚。感谢。

2 个答案:

答案 0 :(得分:1)

假设您希望输出为“H xyz ll uvw W rst rld”,您可以使用:

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

首先,通过生成字符串列表['xyz', 'uvw', 'rst']来展平矩阵,然后使用*运算符解压缩此列表,以便使用format函数。

答案 1 :(得分: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))