将二维数组“列表中列表”输出到文本文件的Python代码
这是个简单的问题 - 我正在用下面的代码创建一个二维数组(ddist = [[0]*d for _ in [0]*d]
),这个数组是用来输出地理信息系统(GIS)数据的距离。我只想找到一个简单的方法,把我的数组/列表的结果输出到一个文本文件中,并保持相同的N*N结构。我之前用过打印语句的输出,但在这种情况下并不是一个好的解决方案。
我刚刚从SAS转到Python,还是个新手。
def match_bg():
#as the name suggests this function will match the variations of blockgroups with grid travel time. Then output into two arras time and distance.
count = -1
countwo = -1
ctime = -1
ddist = [[0]*d for _ in [0]*d] #cratesan N*N array list
dtime = -1
while count < 10:
count = count +1
#j[count][7] = float(j[count][7])
#j[count][6] = float(j[count][6])
while countwo < d:
countwo = countwo+1
if count < 1:
#change values in bg file
j[countwo][7] = float(j[countwo][7])
j[countwo][6] = float(j[countwo][6])
#print j[count], j[countwo]
while ctime < RowsT:
#print ctime, lenth, t[ctime][0], count, countwo
ctime = ctime + 1
#takes both verations of big zone which should be end of the file and matches to travetime file - note 0 and 1 for t[] should be same for different files
if ((j[count][lenth-1] == t[ctime][0]) and (j[countwo][lenth-1] == t[ctime][1])) or ((j[countwo][lenth-1] == t[ctime][0]) and (j[count][lenth-1] == t[ctime][1])):
if t[ctime][0] != t[ctime][1]:
#jkdljf
x1=3963*j[count][7]*(math.pi/180)
x2=3963*j[countwo][7]*(math.pi/180)
y1=math.cos(j[count][6]*math.pi/180)*3963*j[count][7]*(math.pi/180)
y2=math.cos(j[countwo][6]*math.pi/180)*3963*j[countwo][7]*(math.pi/180)
dist=math.sqrt(pow(( x1-x2), 2) + pow((y1-y2), 2))
dtime = dist/t[ctime][11]
print countwo, count
ddist[count-1][countwo-1] = dist/t[ctime][lenth]
print dtime, "ajusted time", "not same grid"
print
elif j[count][5] != j[countwo][5]:
#ljdkjfs
x1=3963*j[count][7]*(math.pi/180)
x2=3963*j[countwo][7]*(math.pi/180)
y1=math.cos(j[count][6]*math.pi/180)*3963*j[count][7]*(math.pi/180)
y2=math.cos(j[countwo][6]*math.pi/180)*3963*j[countwo][7]*(math.pi/180)
dist=math.sqrt(pow(( x1-x2), 2) + pow((y1-y2), 2)) # could change to calculation
dtime = (dist/.65)/(t[ctime][10]/60.0)
print dtime, dist, "not in the same bg", j[count], j[countwo], t[ctime]
elif j[count][5] == j[countwo][5]:
if t[count][7] < 3000000:
dtime = 3
elif t[count][7] < 20000000:
dtime = 8
else:
dtime = 12
print dtime, "same bg"
print t[ctime][0], t[ctime], 1, j[count], j[countwo]
else:
print "error is skip logic", j[count], j[countwo], t[ctime]
break
#elif (j[countwo][lenth-1] == t[ctime][0]) and (j[count][lenth-1] == t[ctime][1]):
#print t[ctime][0], t[ctime], 2, j[count], j[countwo]
#break
ctime = -1
countwo = -1
1 个回答
6
这就是你可以用来输出你的二维列表(或者任何二维列表)的方法:
with open(outfile, 'w') as file:
file.writelines('\t'.join(str(j) for j in i) + '\n' for i in top_list)