python - 暴力最接近配对算法 - for 循环

标签 python

Python 新手。尝试分析最近对点的算法。找到一个example

其中有以下几行:

return min( ((abs(point[i] - point[j]), (point[i], point[j]))
                 for i in range(numPoints-1)
                 for j in range(i+1,numPoints)),
                key=itemgetter(0))

我不清楚 for 循环是如何评估的。

for 循环与点、键和 itemgetter 有何关系?

当我将此代码放入Ideone

我在 times() 函数中遇到运行时错误:

def times():
    ''' Time the different functions
    '''
    import timeit

    functions = [bruteForceClosestPair, closestPair]
    for f in functions:
        print 'Time for', f.__name__, timeit.Timer(
            '%s(pointList)' % f.__name__,
            'from closestpair import %s, pointList' % f.__name__).timeit(number=1)

谢谢。

最佳答案

您的 min 代码相当于使用 generator如下:

def getPoints(point, numPoints):
  for i in range(numPoints - 1):
    for j in range(i + 1, numPoints):
      yield (abs(point[i] - point[j]), (point[i], point[j]))

return min(getPoints(point, numPoints), key=itemgetter(0))

正如 @DSM 所指出的,代码中 min 的第一个参数是 generator expression .

关于python - 暴力最接近配对算法 - for 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22581420/

相关文章:

python - 为什么 model.losses 会返回正则化损失?

python - Pandas 将字符串转换为数据框中多列的 float

python - 为什么我的reverse()方法在python 3中不起作用?

python - 在 Python 2.7 中,通过 super(self.__class__, self)... 调用 super 构造函数不是更好吗?

python - 如何让程序放弃对终端的控制?

python - 根据另一个列表中子字符串的顺序对列表进行排序

python - Pyspark 错误与 UDF : py4j. Py4JException: 方法 __getnewargs__([]) 不存在错误

python - ipython notebook 'run all cells'是同时执行还是顺序执行?

python - 如何在 odoo(版本 8 到 15)中以可编辑模式隐藏字段

python - 元素不可点击,因为另一个元素遮挡了它