如下面的一段代码所示:
a=[1,2,3]b=[-6,0,6]c=[]d=[]for i in range(len(a)): for j in range(len(b)): d.append(a[i]*b[j]) c.append(d) d.clear()print('c={}'.format(c))
本意是想得到一个3*3的一个数组,但在循环的最后使用了d.clear()之后,c中数据被清空
c=[[], [], []]
关键出在append函数上,我将代码稍作修改,进行如下测试:
a=[1,2,3]b=[-6,0,6]c=[]d=[]for i in range(len(a)): for j in range(len(b)): d.append(a[i]*b[j]) print('d={}'.format(d)) c.append(d) print('c={}'.format(c)) d.clear()print('c={}'.format(c))
得到的结果如下:
d=[-6]d=[-6, 0]d=[-6, 0, 6]c=[[-6, 0, 6]]d=[-12]d=[-12, 0]d=[-12, 0, 12]c=[[-12, 0, 12], [-12, 0, 12]]d=[-18]d=[-18, 0]d=[-18, 0, 18]c=[[-18, 0, 18], [-18, 0, 18], [-18, 0, 18]]c=[[], [], []]
在第一次,第二次循环中d.clear()并没有清空c中的元素,只有第三次循环后,c中的元素遭到清空,故在此处加一个判断语句
a=[1,2,3]b=[-6,0,6]c=[]d=[]for i in range(len(a)): for j in range(len(b)): d.append(a[i]*b[j]) c.append(d[:])print('c={}'.format(c))
得到了正确的结果:
c=[[-6, 0, 6], [-12, 0, 12], [-18, 0, 18]]