Python: как проверить, существует ли набор координат в массиве в списке во многих словарях в списке?

Извините, если это звучит очень запутанно, но в основном у меня есть массив из двух столбцов, в котором хранится список 2D-координат:

array([[ 0.31730234,  0.73662906],
   [ 0.54488759,  0.09462212],
   [ 0.07500703,  0.36148366],
   [ 0.33200281,  0.04550565],
   [ 0.3420866 ,  0.9425797 ],
   [ 0.36115391,  0.16670599],
   [ 0.95586938,  0.52599398],
   [ 0.13707665,  0.6574444 ],
   [ 0.77766138,  0.56875582],
   [ 0.79618595,  0.7139309 ]])

У меня есть список словарей, и в каждом из этих словарей есть список случайных комбинаций этих координат под ключом под названием «координаты».

Как создать функцию, которая, если задан случайный набор координат, проверяет, присутствуют ли эти координаты в любом из словарей, а затем возвращает индекс словаря, присутствующего в нем?

Очевидно, что аргументы представляют собой список словарей (так как на самом деле у них есть несколько списков) и идентификатор координаты в массиве. Каждый раз, когда я пытаюсь что-то использовать с любой функцией или перечислять или находить, я получаю синтаксические ошибки - например:

def whichcluster(list,coordinate_id):
.....:     for elem in list:
.....:         if any(x in elem['coordinates'] for coordinate_id):
.....:             return list.index(elem)
.....:         else:
.....:             return False

Почему это не работает?

0
nl ja de
Не используйте list как имя переменной.
добавлено автор eumiro, источник
Не могли бы вы объяснить свое намерение еще немного. Это может помочь найти наиболее эффективное решение. Вы хотите вернуть индекс первого совпадающего кластера или всего?
добавлено автор Rob Cowie, источник

2 ответы

Четыре вопроса с кодом

  • Your generator expression feeding to any is wrong. It should be any(x in elem['coordinates'] for x in coordinate_id)
  • You don;t need to use list.index(elem), to get the index but rather while looping use the enumerate function to get the index with the element `for index, elem in enumerate(list):
  • Using a return inside a loop return list.index(elem) would prematurely return with the first hit. You may miss any subsequent matches. You need to create a generator
  • Don;t use a reserved/in-build names for variable names, for example instead of list, use something more appropriate like coord_list
2
добавлено

Вы понимаете неправильно, это должно быть:

if any(x in elem['coordinates'] for x in coordinate_id):
    ...

И list - это имя-тип, не используйте его как имя переменной.

1
добавлено
Python
Python
7 654 участник(ов)

Уютный чат для профессионалов, занимающихся поиском питоньих мудростей. Как не получить бан: https://t.me/ru_python/577926

Python beginners
Python beginners
4 449 участник(ов)

Вопросы про Python для чайников. Cпам и троллинг неприемлем. Не злоупотребляйте стикерами. Частозадаваемые вопросы: https://github.com/ru-python-beginners/faq/blob/master/README.md Статистика тут: https://grstats.me/chat/x4qym2k5uvfkr3al6at7

pro.python
pro.python
1 090 участник(ов)

Сообщество разработчиков под Python Создатель: @rodgelius

Rude Python
Rude Python
971 участник(ов)

Python без „девочек”, здесь матерятся и унижают Django. Not gay friendly. Правила: t.me/rudepython/114107 @rudepython | t.me/rudepython

rupython
rupython
509 участник(ов)

Группа создана с целью оперативного получения ответов на возникающие вопросы по разработке на яп python, смежные темы, а также человеческого общения. Приветствую!

Python-programming
Python-programming
266 участник(ов)

Чат группы вконтакте https://vk.com/python_community