我很难修改这段代码,我是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
感谢, 艾
答案 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)
中的那个使绝对无意义的那个。
一旦你运行它,你应该会发现你有很多逻辑错误,但我会让你自己解决这些问题。