Как обновить список внутри цикла for? - PullRequest
0 голосов
/ 08 февраля 2019

Я хочу создать сетчатую структуру и хочу проверить, лежит ли географическая точка в ячейке или нет?

У меня есть кортеж координат в виде кортежа, показанного ниже, у меня есть другие координаты в видесписок списка, который также содержит некоторую координату, различное количество координат в каждом подсписке.Я хочу проверить каждую координату подсписка внутри координат с географической координатой в кортеже.В результате я хочу получить список размеров Tuple для каждого подсписка координат со значением 1 или 0 (в зависимости от заданного условия).Если координаты подсписка координат лежат в диапазоне координат данных1, запишите 1, иначе 0.

Если я выберу географическую точку (6.8, 51.35) из подсписка координат, я проверю ее для каждой географической координаты.Tuple, как a = (x, y), измените его на (z = x + 0,49, p = y + 0,49), 0,49, поскольку разрыв ячейки равен 0,05, затем сравните значение (6,8, 51,35) с диапазоном (a, b) & (z, p), замените значение (x, y) на 1, иначе 0.

Tuple = ((6.8, 51.35), (6.85, 51.4), (6.9, 51.45), (6.95, 51.5), (7.0, 51.55), (7.05, 51.6), (7.1, 51.65), (7.15, 51.7), (7.2, 51.75), (7.25, 51.8), (7.3, 51.85), (7.35, 51.9), (7.4, 51.95), (7.45, 52.0), (7.5, 52.05), (7.55, 52.1), (7.6, 52.15), (7.65, 52.2), (7.7, 52.25), (7.75, 52.3), (7.8, 52.35), (7.85, 52.4), (7.9, 52.45), (7.95, 52.5), (8.0, 52.55), (8.05, 52.6), (8.1, 52.65), (8.15, 52.7), (8.2, 52.75), (8.25, 52.8), (8.3, 52.85), (8.35, 52.9), (8.4, 52.95), (8.45, 53.0), (8.5, 53.05), (8.55, 53.1), (8.6, 53.15), (8.65, 53.2), (8.7, 53.25), (8.75, 53.3), (8.8, 53.35), (8.85, 53.4), (8.9, 53.45), (8.95, 53.5), (9.0, 53.55), (9.05, 53.6), (9.1, 53.65), (9.15, 53.7), (9.2, 53.75), (9.25, 53.8), (9.3, 53.85), (9.35, 53.9), (9.4, 53.95), (9.45, 54.0), (9.5, 54.05), (9.55, 54.1), (9.6, 54.15), (9.65, 54.2), (9.7, 54.25), (9.75, 54.3), (9.8, 54.35), (9.85, 54.4), (9.9, 54.45))

coordinate = [[('9.72', '52.33071'), ('9.72005', '52.3306')],[('9.7909166', '52.353843'), ('9.7907', '52.35399'), ('9.7904', '52.35417'), ('9.7897', '52.35454'), ('9.7891696', '52.354815')]]

Код, который я написал:

for i in range(0,2):
    list=[]
    point=cordinate[i]
    y=len(cordinate[i])
    print(y)
    for j in range(0,y):
       l=float(point[j][0])
       m=float(point[j][1])
       #list=[]
       for k in range(0,len(Tuple)):
           x=Tuple[k][0]
           y=Tuple[k][1]
           gap = 0.049
           if (x < l < x + gap) and (y < m < y + gap):
               value = 1
           else:
               value = 0
           list.append(value)
   print(list)

Токовый выход:

2
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]

5
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]

Ожидаемый результат Должен быть список размером 63, который содержит 0 или 1:

[[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]]

Ответы [ 2 ]

0 голосов
/ 08 февраля 2019

У вас три проблемы.Первые два связаны: Vic указал, что ваше предложение "else" выполняется независимо от того, является ли внутреннее if True.Чтобы упростить эту проверку, обновите код проверки пробелов с помощью

gap = 0.049
if (x < l < x + gap) and \
   (y < m < y + gap):
    value = 1
else:
    value = 0

list.append(value)

. Это также устранит вашу вторую проблему: в «найденных» случаях вы добавляете value дважды: один раз внутри if, иоднажды после.

Кроме того, обратите внимание, что вы можете уменьшить эту проверку до одного длинного элемента:

list.append(int((x < l < x + gap) and (y < m < y + gap)))

Наконец, у вас есть проблема-проблема в том, что ваши данные не будут производитьлюбые значения 1 по дизайну.Вы определили диагональный ряд ячеек.Первый имеет диагональные углы (6,8, 51,35) и (6,849, 51,399);следующий поднимается во втором углу и продолжается по диагонали вашей сетки.

Точки в coordinate не попадают ни в одну из этих ячеек.Например, первая точка -

(9.72, 52.33071)

Точки сетки (Tuple) с содержащими x координатами

(9.7, 54.25), (9.75, 54.3)

Но необходимые y координаты почтидве единицы (40 шагов) выше этой точки.Таким образом, для этой точки нет подходящей ячейки.Другие координаты имеют ту же проблему.У вас просто нет какой-либо точки данных, которая соответствует критериям, поэтому в вашем выходном списке будут все нули.

Похоже, что ваши данные или описание вашей проблемы неверны.

0 голосов
/ 08 февраля 2019

Гаутам. Я согласен с комментариями выше по поводу представления MCVE.Одно из мест, на которое вы можете посмотреть, основываясь на опубликованном вами коде, - это оператор if с 4 параметрами:

    if l>x and l<z:
      if m>y and m<p:
        value=1
    else : value = 0

Возможно, вы получаете нежелательный вывод из этого кода, потому что ваш оператор else выполняет каждую итерацию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...