Python:"行为不端"在循环中插入函数

时间:2013-07-17 09:30:13

标签: python for-loop insert tuples

我写了以下代码:

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

1 个答案:

答案 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提供良好语法方面的帮助。