0

我写了以下代码:

...
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因为它没有得到具有相等长度行的元组。为什么?

4

1 回答 1

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)on时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)
...

这里给出的方法都不起作用,所以我不得不按照我的方式克隆基础。不过,我愿意接受有关更好方法的建议。

PS:感谢@Lattyware 对良好语法的帮助。

于 2013-07-17T11:10:21.017 回答