0

对不起,如果这听起来非常混乱,但基本上我有一个两列数组存储二维坐标列表:

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

我有一个字典列表,在每个字典中都有一个这些坐标的随机组合列表,位于一个名为“坐标”的键下。

如果给定一组随机坐标,我如何创建一个函数,检查这些坐标是否存在于任何字典中,然后返回其存在的字典的索引?

显然,参数是字典列表(因为我实际上有多个列表)和数组中的坐标 id。每次我尝试使用 any 函数或枚举或查找时,都会出现语法错误 - 例如:

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

为什么这不起作用?

4

2 回答 2

2

您的代码的四个问题

  • 您的生成器表达式提供给 any 是错误的。它应该是any(x in elem['coordinates'] for x in coordinate_id)
  • 您不需要使用 list.index(elem) 来获取索引,而是在循环时使用 enumerate 函数来获取带有元素 `for index, elem in enumerate(list) 的索引:
  • 在循环内使用 returnreturn list.index(elem)会在第一次命中时过早返回。您可能会错过任何后续比赛。您需要创建一个生成器
  • 不要为变量名称使用保留/内置名称,例如list,使用更合适的名称代替coord_list
于 2012-12-28T12:29:16.310 回答
1

你的理解写错了,应该是:

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

andlist是一个类型名,不要将其用作变量名。

于 2012-12-28T12:09:52.373 回答