所以,我正在尝试使用矩阵格式化字符串,例如:
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])
这不起作用(语法错误无效),有什么方法可以使这项工作?我希望一切都清楚。感谢。
答案 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))