Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/346.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 巨蟒:“;“行为不端”;在循环中插入函数_Python_For Loop_Insert_Tuples - Fatal编程技术网

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    |
+----------------------+
这正是我想要的。当我在第一个以类似方式打印另一个tuple
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
函数的错误,因为它没有得到长度相等的行的元组。为什么?好的,我想好了。所发生的事情是,首先构建基础的方式会影响函数。我只是给出了随机数作为
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()
上使用and
deque.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)
...