Python 巨蟒:“;“行为不端”;在循环中插入函数
我编写了以下代码:Python 巨蟒:“;“行为不端”;在循环中插入函数,python,for-loop,insert,tuples,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'] 第一次运行函数时,我得到:
...
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 |
+----------------------+
这正是我想要的。当我在第一个以类似方式打印另一个tuplebasis=[[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
函数的错误,因为它没有得到长度相等的行的元组。为什么?好的,我想好了。所发生的事情是,首先构建基础的方式会影响函数。我只是给出了随机数作为basis
的一个例子,但事实上它是(在代码的深处):
所以当我在基础[0]
上插入(0,某物)
时,它也在基础[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)
...
给出的方法都不起作用,所以我不得不用我所做的方式克隆基础。不过,我愿意接受关于更好的方法的建议
注意:感谢@Lattyware提供有关良好语法的帮助。不要按索引循环-它速度慢、难以阅读且不灵活<编码>用于范围内的x(len(coeff)):coeff[x]。插入(0,名称[x])成为邮政编码中的x的
名称(coeff,名称):x.insert(0,名称)
。您还应该避免使用一行循环-这会使代码更难阅读。如果您总是在前面插入,您可能希望在列表和list.insert()
上使用anddeque.appendleft()
。@Lattyware感谢您的语法更正。现在干净多了,但还是不行。结果与我的循环设计完全相同。我现在要试试deque
。我建议的任何一件事都不会改变程序的功能,它们只是做你正在做的事情的更好的方法。你没有完全复制和粘贴,或者print\u matrix
的实现可能是相关的。在这里,您发布的代码给出了您想要的正确结果:basis=[[Center'、[A1'、[A2'、[A3']、[A',7,8,9]、[B',10,11,12]
...
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)
...