Предполагая, что вы прочитали этот CSV в какой-то последовательности последовательностей (например, list(csv.reader(f))
), все, что вам нужно сделать, это перебрать все комбинации местоположений. И это именно то, что itertools.combinations
делает:
>>> locs = [('A', 55.322, -117.17), ('B', 57.316, -117.456), ('C', 54.275, 116.567)]
>>> for (loc1, lat1, lon1), (loc2, lat2, lon2) in itertools.combinations(locs, 2):
... print(loc1, loc2, global_distance((lat1, lon1), (lat2, lon2)))
A B 222.42244003744995
A C 122.66829007875741
B C 342.67144769115316
Пока вы смотрите на связанные документы выше, обратите внимание на combinations_with_replacement
, permutations
и product
, которые часто являются ответами на похожие, но слегка отличающиеся проблемы.
Это должно быть легко адаптироваться к последовательности диктов, или дикту из Location
экземпляров и т. Д. Если, с другой стороны, у вас есть что-то вроде двумерного массива или панды DataFrame, вы можете захотеть сделать что-то другое. (Несмотря на быстрый поиск, похоже, что создание массива комбинаций itertools
с fromiter
не намного медленнее, чем что-либо еще, даже если вы хотите обменять пространство на время для трансляции своей функции global_distance
.)