[英]how to assess tuples in a list in python?
我有4个人在不同的位置。 我想这些应该是列表中的元组?
People=[(5,0),(4,3),(5,2),(8,3)]
人1位于x=5
且y=0
,如果您将其视为2D网格等。
(8,4)
处有辆汽车
我创建了一个代码,通过首先将x和y坐标拆分为一个列表,然后循环遍历此列表以计算每个汽车的成本,来计算汽车最接近的人:
for i in range (4):
cost=abs((xcar-xpeople[i])+(ycar-people[I])
那行得通,但是,我不想先拆分坐标,而是逐一评估列表中的元组,而是将它们作为一个整体来对待。 我该怎么做呢?
我希望这很清楚! 提前致谢 :-)
您可以考虑使用numpy
库,它使对数组的操作变得简单快捷:
>>> import numpy as np
>>> people=np.array([(5,0),(4,3),(5,2),(8,3)])
>>> xcar = np.array((8,4))
>>> abs(people - xcar)
array([[3, 4],
[4, 1],
[3, 2],
[0, 1]])
您可以在迭代列表的同时简单地打开元组的包装:
for x, y in People:
cost = abs((xcar - x) + (ycar - y))
>>> People=[(5,0),(4,3),(5,2),(8,3)]
>>> car=(8,4)
>>> from math import hypot
>>> from operator import sub
>>> closest=min(People, key=lambda pos: hypot(*map(sub, pos, car)))
>>> closest
(8, 3)
复数是变相的有序对。
people = [5, 4+3j, 5+2j, 8+3j]
car = 8+4j
costs = [abs(car - person) for person in people]
如果您不想导入其他库(例如numpy),并且不想执行不必要的操作(例如power
,然后平方根)只是为了计算距离,则可以在纯Python中使用enumerate
:
People=[(5,0),(4,3),(5,2),(17,10),(8,3)]
car = (8,4)
min_cost = 99999
min_index = -1
for i, coord in enumerate(People):
cost = abs(car[0] - coord[0]) + (car[1] - coord[1])
if (min_cost > cost):
(min_cost, min_index) = (cost, i)
print(People[min_index])
这样,您还可以拥有索引,而不仅是值,以备日后进行其他操作时使用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.