我写了以下代码:
...
for x in range(len(coeff)): coeff[x].insert(0,names[x])
coeff.insert(0,['Center','c1','c2','c3'])
print_matrix(coeff)
...
print_matrix
函数只是从元组[[row1],[row2],[etc ...]]打印一个漂亮的矩阵。
我的coeff = [[1,2,3],[4,5,6]]
和我的names = ['A,'B']
。
我第一次运行我得到的功能:
coeff = [['Center','c1','c2','c3'],['A',1,2,3],[B,4,5,6]]
+----------------------+
| Center c1 c2 c3 |
| A 1 2 3 |
| B 4 5 6 |
+----------------------+
这正是我想要的。当我在第一个脚本之后运行相同(复制并粘贴)脚本以类似方式打印另一个元组basis = [[7,8,9],[10,11,12]]
时,问题就出现了:
...
del x
for x in range(len(basis)): basis[x].insert(0,names[x])
basis.insert(0,['Center','A1','A2','A3'])
print_matrix(basis)
...
然后我得到:
basis = [['Center','A1','A2','A3'],['A','B',7,8,9],['A','B',10,11,12]]
和来自print_matrix
函数的错误,因为它没有得到具有相等长度行的元组。为什么呢?
答案 0 :(得分:0)
好的,我把它解决了。发生的事情是basis
在第一个地方建造的方式影响了这些功能。我只是给随机数字作为basis
的一个例子,但实际上它是(代码深处):
coordinates = [...,[1,2,3],...]
coordinates[7] = [1,2,3] # Or something like that
basis = []
basis.append(coordinates[7])
...
basis.append(coordinates[7])
因此当我在insert(0,something)
上basis[0]
时,它还会将元素插入basis[1]
。
以下是一段有效的代码:
...
basis_clone = [[y for y in basis[x]] for x in range(len(basis))]
for y, name in zip(basis_clone,orbital_center_names): y.insert(0,name)
basis_clone.insert(0,['Center','A1','A2','A3'])
print_matrix(basis_clone) ; sleep(0.1)
...
给出here的方法都没有用,所以我必须按照我的方式克隆基础。我愿意接受更好的方法来做到这一点。
P.S。:感谢@Lattyware提供良好语法方面的帮助。