从计数函数得到错误结果

2024-06-28 18:43:52 发布

您现在位置:Python中文网/ 问答频道 /正文

这是我的代码,我知道它不够干净,但它不能像我想的那样运行,有人能帮我吗?你知道吗

我修好了,谢谢你的帮助

此代码的总体思想是将每个坐标与一个范围进行比较,并计算每个网格的点数

结果是: {other':862,'B4':2,'D5':1,'A1':0,'D4':2,'A3':2,'A2':2,'A4':0,'B2':36,'B3':8,'C3':15,'C2':50,'C1':1,'C4':7,'D3':4,'C5':1,'B1':7}

我不知道为什么“其他人”会得到这么多

 import json
    from pprint import pprint
    xa1_min = 144.700000
    xa1_max = 144.850000
    ya1_min = -37.650000
    ya1_max = -37.500000

    xa2_min = 144.850000
    xa2_max = 145.000000
    ya2_min = -37.650000
    ya2_max = -37.500000

    xa3_min = 145.000000
    xa3_max = 145.150000
    ya3_min = -37.650000
    ya3_max = -37.500000

    xa4_min =145.150000
    xa4_max =145.300000
    ya4_min =-37.650000
    ya4_max =-37.500000

    xb1_min =144.700000
    xb1_max =144.850000
    yb1_min =-37.800000
    yb1_max =-37.650000

    xb2_min =144.850000
    xb2_max =145.000000
    yb2_min =-37.800000
    yb2_max =-37.650000

    xb3_min =145.000000
    xb3_max =145.150000
    yb3_min =-37.800000
    yb3_max =-37.650000

    xb4_min =145.150000
    xb4_max =145.300000
    yb4_min =-37.800000
    yb4_max =-37.650000

    xc1_min =144.700000
    xc1_max =144.850000
    yc1_min =-37.950000
    yc1_max =-37.800000

    xc2_min =144.850000
    xc2_max =145.000000
    yc2_min =-37.950000
    yc2_max =-37.800000

    xc3_min =145.000000
    xc3_max =145.150000
    yc3_min =-37.950000
    yc3_max =-37.800000

    xc4_min =145.150000
    xc4_max =145.300000
    yc4_min = -37.950000
    yc4_max = -37.800000

    xc5_min =145.300000
    xc5_max =145.450000
    yc5_min =-37.950000
    yc5_max =-37.800000

    xd3_min =145.000000
    xd3_max =145.150000
    yd3_min =-38.100000
    yd3_max =-37.950000

    xd4_min =145.150000
    xd4_max =145.300000
    yd4_min =-38.100000
    yd4_max =-37.950000

    xd5_min =145.300000
    xd5_max =145.450000
    yd5_min =-38.100000
    yd5_max =-37.950000
    #["properties"]['ID']
    # Reading from grid
    with open('tinyTwitter.json') as load_f:
        info = json.load(load_f)

    coordinates = list()
    #print info

    for line in info:
        #print line['json']['coordinates']['coordinates']
        coordinates.append(line['json']['coordinates']['coordinates'])

    #print coordinates[0][1]
    #print coordinates[0][0]

    counts = {'A1':0,'A2':0,'A3':0,'A4':0,'B1':0,'B2':0,'B3':0,'B4':0,'C1':0,'C2':0,'C3':0,'C4':0,'C5':0,'D3':0,'D4':0,'D5':0,'other':0}
    #comparing
    def compare(x,y):


    if xa1_min <= x <= xa1_max and ya1_min <= y <= ya1_max:
        counts['A1'] +=1

    elif xa2_min <= x <= xa2_max and ya2_min <=y<= ya2_max:
        counts['A2'] +=1

    elif xa3_min <= x <= xa3_max and ya3_min <=y<= ya3_max:
        counts['A3'] +=1

    elif xa4_min <= x <= xa4_max and ya4_min <=y<= ya4_max:
        counts['A4'] += 1

    elif xb1_min <= x <= xb1_max and yb1_min <=y<= yb1_max:
        counts['B1'] += 1

    elif xb2_min <= x <= xb2_max and yb2_min <=y<= yb2_max:
        counts['B2'] += 1

    elif xb3_min <= x <= xb3_max and yb3_min <=y<= yb3_max:
        counts['B3'] += 1

    elif xb4_min <= x <= xb4_max and yb4_min <=y<= yb4_max:
        counts['B4'] += 1

    elif xc1_min <= x <= xc1_max and yc1_min <=y<= yc1_max:
        counts['C1'] += 1

    elif xc2_min <= x <= xc2_max and yc2_min <=y<= yc2_max:
        counts['C2'] += 1

    elif xc3_min <= x <= xc3_max and yc3_min <=y<= yc3_max:
        counts['C3'] += 1

    elif xc4_min <= x <= xc4_max and yc4_min <=y<= yc4_max:
        counts['C4'] += 1

    elif xc5_min <= x <= xc5_max and yc5_min <=y<= yc5_max:
        counts['C5'] += 1

    elif xd3_min <= x <= xd3_max and yd3_min <=y<= yd3_max:
        counts['D3'] += 1

    elif xd4_min <= x <= xd4_max and yd4_min <=y<= yd4_max:
        counts['D4'] += 1

    elif xd5_min <= x <= xd5_max and yd5_min <=y<= yd5_max:
        counts['D5'] += 1

    else:
        counts['other']+= 1

        #print counts

    for i,j in coordinates:
        #print i,j
        compare(i,j)
    print counts

Tags: andjsonminmaxprintelifcountscoordinates
2条回答

也许您正在寻找:

len(counts.keys())

如果不是的话,围绕你的问题多一些背景知识会有助于找到解决方案。另外,通过将这些min/max数据点存储在字典列表中,并将这些比较语句压缩到单个循环中,似乎可以节省大量代码重复。大致如下:

data = [{'x-min': 0, 'x-max': 1, 'y-min': 0, 'y-max': 1, 'count': 0}, ...]

def within_threshold(x1, y1, point):
    within_x = x >= point['x-min'] and x <= point['x-max']
    within_y = y >= point['y-min'] and y <= point['y-max']
    return within_x and within_y

def compare(x, y):
    for point in data:
        if within_threshold(x, y, point):
            point['count'] += 1

替换窗体的行

counts['A1']+=counts['A1']

用表格的线条

counts['A1']+=1

实际上,您永远不会增加counts,因为每次都要向它添加当前值(0)。你知道吗

相关问题 更多 >