Python中最接近的一对

时间:2012-12-06 09:20:07

标签: python

我很难修改这段代码,我是python的新手,我试图在用户的10个输入整数中找到最接近的一对。到目前为止,这是我的代码,并且存在语法错误...

a = [0,1,2,3,4,5,6,7,8,9] 
a[0]=input() 
a[1]=input() 
a[2]=input() 
a[3]=input() 
a[4]=input() 
a[5]=input() 
a[6]=input() 
a[7]=input() 
a[8]=input() 
a[9]=input() 
a.sort() 
b=sorted(set(a)) 
for item in enumerate(a):
    for item1 in enumerate(b):
        c = item - enumerate(b)
        if c = item-1:
            print item
            print c

感谢, 艾

2 个答案:

答案 0 :(得分:1)

您的代码导致异常,因为您没有正确处理enumerate的输出。您的item值将是(value, index)对,而不是单个值,因此无法直接减去它们。

这是另一种实现,可能与您的目标相似:

import itertools

def find_nearest_pair(lst):
    min_pair = None
    min_distance = float("inf")

    for a, b in itertools.combinations(lst, 2): # generates all (a,b) pairs
        distance = abs(a-b) # abs makes distance always non-negative
        if distance < min_distance:
            min_pair = (a,b)
            min_distance = distance

    return min_pair # you could return min_distance here too (or instead)

您甚至可以使用min功能进一步压缩它:

nearest_pair = min(itertools.combinations(lst, 2),
                   key=lambda item: abs(item[0]-item[1]))

或者,如果您只想要值:

nearest_pair_distance = min(abs(a-b) for a, b in itertools.combinations(lst, 2))

答案 1 :(得分:0)

enumerate的所有这些电话是为了什么?这是为了你想要迭代一个集合并保持一个计数器。你应该删除所有这些 - 但尤其是行c = item - enumerate(b)中的那个使绝对无意义的那个。

一旦你运行它,你应该会发现你有很多逻辑错误,但我会让你自己解决这些问题。