Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 计算圆形阵列中元素之间的距离_Python_Arrays_Circular Buffer_Circular List - Fatal编程技术网

Python 计算圆形阵列中元素之间的距离

Python 计算圆形阵列中元素之间的距离,python,arrays,circular-buffer,circular-list,Python,Arrays,Circular Buffer,Circular List,大家好!我正在研究这个问题,基本上我有一个包含一些人/对象的列表,实际上是一个圆形的表格,也就是说,它的头和它的尾巴相连。现在我想计算“警察”和人之间的距离(指数位置),然后输出谁与“警察”之间的距离最大。如果它们都具有相同的距离,则输出必须是它们的全部 这是我的密码,最后我得到了所有人和“警察”之间的距离。我曾想过通过一系列len(peoplePositions)和一系列len(cops)在距离上做一个嵌套循环,但没有任何进展。您需要计算每个人到每个COP的最小距离。这可以计算为: peopl

大家好!我正在研究这个问题,基本上我有一个包含一些人/对象的列表,实际上是一个圆形的表格,也就是说,它的头和它的尾巴相连。现在我想计算“警察”和人之间的距离(指数位置),然后输出谁与“警察”之间的距离最大。如果它们都具有相同的距离,则输出必须是它们的全部


这是我的密码,最后我得到了所有人和“警察”之间的距离。我曾想过通过一系列len(peoplePositions)和一系列len(cops)在距离上做一个嵌套循环,但没有任何进展。

您需要计算每个人到每个
COP的最小距离。这可以计算为:

people = ["James","COP","George","COP","Sam","Mac","Johnny","Karina"]

cops = [(idx+1) for idx, val in enumerate(people) if val == "COP"]  #cops' positions
peoplePositions = [(x+1) for x in range(len(people))] #index positions
distances = []
for x in peoplePositions:
    for y in cops:
        distances.append(abs(x-y))

#the output would be "Johnny" 
其中,
p
是人的索引,
c
COP
的索引,
l
是数组的长度。然后,您可以计算这些距离的最小值,以获得从一个人到任何
COP
s的最小距离。然后,您可以计算这些值的最大值,并根据距离等于最大值的情况过滤
人员
数组:

min((p - c) % l, (c - p) % l)
输出:

people = ["James","COP","George","COP","Sam","Mac","Johnny","Karina"]
cops = [idx for idx, val in enumerate(people) if val == "COP"]
l = len(people)
distances = [min(min((p - c) % l, (c - p) % l) for c in cops) for p in range(l)]
maxd = max(distances)
pmax = [p for i, p in enumerate(people) if distances[i] == maxd]
print(pmax)

什么是
peoplePositions
?是人员的索引位置。如果您的代码定义了所有变量,这会有所帮助。有许多方法可以解释变量的描述。但是如果你真的在代码中定义了它,那么我们就没有机会弄错了。哦,对不起!我只是点错了密码。现在它是正确的。而且,我不理解最后的注释
,输出将是“Johnny”
。此代码没有打印语句,因此没有输出。你以为“强尼”会从哪里来?
['Johnny']