如何评估python列表中的元组?

时间:2016-12-23 14:03:59

标签: python arrays list tuples

我有4个人都在不同的位置。我想这些应该是列表中的元组?

People=[(5,0),(4,3),(5,2),(8,3)]

第1人在x=5y=0,如果你认为它是2D网格等等。

(8,4)

有一辆车

我创建了一个代码,通过首先分割x和y坐标,将它们放在一个列表中,然后循环遍历此列表来计算每个人的成本来计算汽车最接近的人:

for i in range (4):
    cost=abs((xcar-xpeople[i])+(ycar-people[I])

然而,这是有效的,我不想先拆分坐标,并逐一评估列表中的元组,但将它们视为一个整体。我该怎么做?

我希望这很清楚! 在此先感谢: - )

5 个答案:

答案 0 :(得分:2)

您可以考虑使用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]])

答案 1 :(得分:1)

您可以在迭代列表时解压缩元组:

for x, y in People:
    cost = abs((xcar - x) + (ycar - y))

答案 2 :(得分:1)

>>> 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)

答案 3 :(得分:0)

复数是伪装的有序对。

people = [5, 4+3j, 5+2j, 8+3j]
car = 8+4j
costs = [abs(car - person) for person in people]

答案 4 :(得分:0)

如果您不想导入其他库(如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])

通过这种方式,您还可以获得索引,而不仅仅是值,以防您以后需要其他操作。