-2

我很难修改这段代码,我对 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

谢谢,艾

4

2 回答 2

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))
于 2012-12-06T09:58:32.357 回答
0

所有这些呼吁是enumerate为了什么?那是当您想要遍历集合并保留一个计数器时。您应该删除所有这些 - 但尤其是c = item - enumerate(b)绝对没有意义的那一行。

一旦你让它运行起来,你应该会看到你也有一些逻辑错误,但我会让你自己修复这些错误。

于 2012-12-06T09:24:26.230 回答