【问题标题】:How to save values into one list to iterate in Python?如何将值保存到一个列表中以在 Python 中进行迭代?
【发布时间】:2019-06-09 22:34:41
【问题描述】:

我一直在尝试学习 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 中执行此操作吗?

【问题讨论】:

  • 你显然把你的print(listing) inside 循环,以便它每次迭代打印一次,每次在列表中比上次多一个元素。取消缩进 print 使其与 for 对齐。
  • 谢谢你的回答,我也试过不缩进,结果是一样的。
  • 我按照我相信的方式更新了代码。在我看来,这超出了循环
  • 你能告诉我们循环内print(latitude)的结果吗?
  • 显示纬度值,一一显示41.40669669938007 41.40362922649583 41.40796500198342 41.402031046547755 41.403128467631326 41.404730777456884 41.406639273237886 41.409320388183545 41.40396550306589 41.40005136675153

标签: python-3.x list


【解决方案1】:

您可以在 python 中使用slicing 完成listing 列表坐标的第二个到最后一个的迭代:

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)

【讨论】:

    猜你喜欢
    • 2021-10-22
    • 1970-01-01
    • 2021-12-28
    • 2021-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-13
    相关资源
    最近更新 更多