Как сохранить значения в один список для повторения в Python? - PullRequest
0 голосов
/ 10 июня 2019

Я пытался изучить циклы и листинг в Python. У меня есть набор данных из цикла for.

listing = []
 try:
        for coordinates in g.objects(None, predicate=URIRef('http://www.w3.org/ns/prov#generatedAtCoordinates')):
            final_coordinates = coordinates
            data = final_coordinates.split(",")
            latitude = float(data[0])
            longitude = float(data[1])
            calc_distance = (latitude, longitude)
        listing.append(calc_distance)

 except ValueError:
        final_coordinates = 0

 print(listing)

значение calc_distance:

(41.403277274422436, 2.0966085137374164)
(41.4018032171552, 2.094118204776835)
(41.4031599745838, 2.09554506488234)
(41.40939182891685, 2.092649778368276)
(41.40498153943922, 2.092998814485954)
(41.40134146772367, 2.0950656171373985)
(41.40741149037425, 2.0911841596351013)

Это куча случайных координат.

Я хочу сохранить их все в один большой список, чтобы иметь возможность повторять. Идея состоит в том, чтобы рассчитать расстояния между ними.

Печать listing выглядит странно:

[(41.406975300145035, 2.091861990302946)]
[(41.406975300145035, 2.091861990302946), (41.40113308262795, 2.091383862874567)]
[(41.406975300145035, 2.091861990302946), (41.40113308262795, 2.091383862874567), (41.40599600376296, 2.0947715310666606)]
[(41.406975300145035, 2.091861990302946), (41.40113308262795, 2.091383862874567), (41.40599600376296, 2.0947715310666606), (41.408565289702246, 2.0903512224468255)]

Это должно выглядеть так:

[(41.403277274422436, 2.0966085137374164), (41.4018032171552, 2.094118204776835), (41.4031599745838, 2.09554506488234)]

Итак, из этого списка я хочу иметь возможность выбрать первый и рассчитать расстояния между другими координатами.

Я не знаю Python, но в Java есть функция итератора, которая просматривает список один за другим и автоматически подставляет значение. что-то вроде object.next Я хочу, чтобы первое значение было стабильным, но вторая координата будет меняться до конца этого списка.

например:

print(geopy.distance.distance(calc_distance[1], calc_distance.next).km)

Есть идеи, как это сделать в Python3?

1 Ответ

0 голосов
/ 02 июля 2019

Вы можете выполнить итерацию от второй до последней из координат списка listing, используя slicing в python:

from geopy import distance

listing = []
try:
    for coordinates in g.objects(None, predicate=URIRef('http://www.w3.org/ns/prov#generatedAtCoordinates')):
        final_coordinates = coordinates
        data = final_coordinates.split(",")
        latitude = float(data[0])
        longitude = float(data[1])
        calc_distance = (latitude, longitude)

        # each value from list of coordinates will be appended to 'listing' if it
        # is inside the 'for' loop.
        listing.append(calc_distance)

except ValueError:
    final_coordinates = 0

# create new list with all values from 'listing'
# except first coordinate pair.
sliced_listing = listing[1:]

# first coordinate pair in 'listing' will be compared to 
# each value in sliced list.
for coord_pair in sliced_listing:
    print(distance.distance(listing[0], coord_pair).km)

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