在Python中将二维数组“列表的列表”输出到文本文件

4

简单问题 - 我在下面的代码中使用列表创建了一个二维数组(ddist = [[0]*d for _ in [0]*d]),它使用gis数据输出距离。我只想找到一种简单的方法将我的数组/列表结果输出到一个文本文件中,保持相同的N*N结构。过去我用print语句输出过结果,但在这种情况下不是一个好的解决方案。

我是通过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

请将所有代码缩进四个空格,以便正确格式化。对于您第一句话中的代码,您需要使用反引号字符(`)进行分隔。 - Nikhil
哦,亲爱的,这段代码与将输出写入文件有何关联? - SilentGhost
1个回答

6

以下是你可以用来输出你的二维列表(或任何二维列表)的代码:

with open(outfile, 'w') as file:
    file.writelines('\t'.join(str(j) for j in i) + '\n' for i in top_list)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接