#python #arrays #circular-buffer #circular-list
#python #массивы #циклический буфер #циклический список
Вопрос:
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"
Привет, ребята! Я работаю над этим вопросом, и в основном у меня есть список с некоторыми людьми / объектами, который на самом деле является круговой таблицей, т. Е. Его Голова связана с хвостом. Теперь я хочу взять расстояние (позиций индекса) между «полицейскими» и людьми, а затем вывести, кто получил максимальное расстояние от «полицейских». В случае, если все они получили одинаковое расстояние, на выходе должны быть все они.
Это мой код, и в итоге я получил расстояния между всеми людьми и «полицейскими». Я думал о создании вложенного цикла по расстояниям с диапазоном len (peoplePositions) и диапазоном len (cops), но у меня не было никакого прогресса.
Комментарии:
1. Что такое
peoplePositions
?2. Это позиции индекса людей.
3. Было бы полезно, если бы ваш код определял все переменные. Существует много способов интерпретировать описание переменной. Но если вы на самом деле определяете это в коде, у нас нет шансов ошибиться.
4. о, извините! Я просто неправильно щелкнул код. Теперь это правильно.
5. Кроме того, я не понимаю заключительный комментарий
the output would be "Johnny"
. В этом коде нет операторов печати, поэтому вывода нет. Откуда вы ожидаете, что «Джонни» придет?
Ответ №1:
Вам нужно вычислить минимальное расстояние от каждого человека до каждого COP
. Это можно вычислить как:
min((p - c) % l, (c - p) % l)
где p
индекс человека, c
индекс COP
и l
длина массива. Затем вы можете вычислить минимальное из этих расстояний, чтобы получить минимальное расстояние от человека до любого из COP
s. Затем вы можете вычислить максимальное из этих значений и отфильтровать people
массив на основе их расстояния, равного максимальному:
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)
Вывод:
['Johnny']