簡體   English   中英

如何在python列表中評估元組?

[英]how to assess tuples in a list in python?

我有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])

那行得通,但是,我不想先拆分坐標,而是逐一評估列表中的元組,而是將它們作為一個整體來對待。 我該怎么做呢?

我希望這很清楚! 提前致謝 :-)

您可以考慮使用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM