Reputation: 1
The list bin_bd
value gets changed even if not altered; the program is for binning method extracting data from a CSV file. I want to try all binning methods.
But the list keeps getting updated. Why is that?
import random
import math
f=open('book3.csv','w')
for i in range(0,12):
e=str(random.randint(0,10))
f.write(e+'\n')
f.close()
z=[]
f=open('book3.csv','r+')
while True:
l=f.readline()
if not l : break
z.append(int(l))
f.close()
z.sort()
bin_out=[]
bin_mean=[]
bin_bd=[]
bin_no=input('Enter no of bins')
bsize=int (math.ceil(len(z)/bin_no))
print bsize
count=0
for i in range(bin_no):
bins1=[]
for j in range(bsize):
if(count<len(z)) :
print count
bins1.append(z[count])
count+=1
bin_out.append(bins1)
bin_mean.append(bins1)
bin_bd.append(bins1)
print "bins formed "
print bin_mean
print "Smoothing methods"
print bin_bd
binn1=[]
for i in bin_mean:
binn1.append(i)
print "By Mean"
p=[]
for i in range(len(bin_mean)):
k= sum(bin_mean[i])/bsize
p.append(k)
for i in range(len(binn1)):
for j in range(bsize):
binn1[i][j]=p[i]
print binn1
print "by Boundary "
p=[]
binn2=[[]]
print bin_bd
for j in range(0,4):
#print j
if (j==0 or j== bsize//1):
print " "
elif(j-0>j-bsize):
#print main[i][0]
binn2.append(bin_bd[i][0])
else:
binn2.append(bin_bd[i][bsize])
#print binn2
Upvotes: 0
Views: 33
Reputation: 781964
When you do:
bin_out.append(bins1)
bin_mean.append(bins1)
bin_bd.append(bins1)
all three lists contain references to the same bins1
lists. Then later you do:
for i in bin_mean:
binn1.append(i)
so binn1
also contains references to the same lists. Finally, you do:
binn1[i][j]=p[i]
This modifies the lists that all 4 variables refer to.
You should make copies of the lists:
bin_out.append(bins1[:])
bin_mean.append(bins1[:])
bin_bd.append(bins1[:])
...
for i in bin_mean:
binn1.append(i[:])
BTW, that loop can be done with a list comprehension:
binn1 = [i[:] for i in bin_mean]
Upvotes: 2