Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python中只有基本数据类型的最接近的十个整数对_Python_Closest Points - Fatal编程技术网

python中只有基本数据类型的最接近的十个整数对

python中只有基本数据类型的最接近的十个整数对,python,closest-points,Python,Closest Points,我真的需要代码方面的帮助。用户需要输入10个整数,程序必须显示最接近的一对。我可以使用itertools来完成,但我的教授不会接受.sort()、min()、enumerate()等。。。我需要手动操作。以下是我使用itertools生成的代码: import itertools 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

我真的需要代码方面的帮助。用户需要输入10个整数,程序必须显示最接近的一对。我可以使用itertools来完成,但我的教授不会接受.sort()、min()、enumerate()等。。。我需要手动操作。以下是我使用itertools生成的代码:

import itertools

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

for item in enumerate(a):             
c = min(itertools.combinations(b, 2),
                   key=lambda item: abs(item[0]-item[1]))

print 'The closest pair/One of the closest pair is: ', c
对于手动最接近对程序,以下是我迄今为止的代码:

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

#Sorting the Array
b = True             #para sa swapping
while b==True:
b= False
for i in range(0,len(a)-1):
    if (a[i]>a[i+1]):
        c=a[i]
        a[i]=a[i+1]
        a[i+1]=c
        b=True

#Generate all the posible combinations of 
不管我怎么努力,我都做不完。。我将感谢任何帮助

谢谢,
爱伦

你可以非常有效地做到这一点,只需看看每个数字,然后再看看你可以配对的每个数字。在迭代每个可能的对之后,您可以只返回最接近的对

numbers = [7,15,0,4,3,12,76]


def pair_distance(pair):
    return abs(pair[0] - pair[1])

closest_pair = None

for i, number1 in enumerate(numbers):
    for j, number2 in enumerate(numbers):
        if i != j: #Otherwise we'd always have numbers[0], numbers[0] as pair!
            pair = number1, number2
            if closest_pair is None or pair_distance(pair) < pair_distance(closest_pair):
                closest_pair = pair


print "The closest pair is", closest_pair
number=[7,15,0,4,3,12,76]
def对_距离(对):
返回abs(对[0]-对[1])
最近的_对=无
对于i,枚举中的数字1(数字):
对于j,枚举中的数字2(数字):
如果我j:#否则我们总是有数字[0],数字[0]成对!
配对=编号1,编号2
如果最近的对为无或对距离(对)<对距离(最近的对):
最近的对=对
打印“最近的一对是”,最近的一对

我的错,我错过了不允许的列举:

i = -1
j = -1
for number1 in numbers:
    i += 1
    for number2 in numbers:
        j += 1
        if i != j: #Otherwise we'd always have numbers[0], numbers[0] as pair!
            pair = number1, number2
            if closest_pair is None or pair_distance(pair) < pair_distance(closest_pair):
                closest_pair = pair
i=-1
j=-1
对于数字中的数字1:
i+=1
对于数字中的数字2:
j+=1
如果我j:#否则我们总是有数字[0],数字[0]成对!
配对=编号1,编号2
如果最近的对为无或对距离(对)<对距离(最近的对):
最近的对=对

因为这是家庭作业,我建议你在交作业之前试着理解为什么这样做有效,为什么这样做效率低下

正如评论中所建议的,首先对列表进行排序可以为您提供更有效的解决方案



一、 但是,我认为您可能不应该使用Python来完成此任务。在高级语言中使用低级结构没有多少学习价值

我认为你的教授拒绝使用
itertools.combines()
的答案并不是没有道理的。您不需要查看所有的组合,如果您对数组进行排序,那么您所需要做的就是找到相邻项之间的最小差异,并且这些项是最接近的一对


因此,问题归结为是否允许您使用
.sort()
(如果不允许,您必须实现自己的排序算法),以及您是否知道如何编写查找相邻值之间最小差异的循环。我把这两个都留给你做练习。

看看这个,我觉得对你有好处

# fill the array with input
a = [int(num) for num in raw_input().split(" ")]

# REVERSE sorting the array
for j in range(len(a) - 1, -1, -1):
    for i in range(0, j):
        if (a[i] < a[i+1]):
            c = a[i]
            a[i] = a[i+1]
            a[i+1] = c

min = a[0] + a[1]

for i in range(0, len(a) - 1):    
    if min > a[i] - a[i + 1]:
        min = a[i] - a[i + 1]

print min
#用输入填充数组
a=[int(num)表示原始输入()中的num。拆分(“”)
#对数组进行反向排序
对于范围内的j(len(a)-1,-1,-1):
对于范围(0,j)内的i:
如果(a[i]a[i]-a[i+1]:
min=a[i]-a[i+1]
打印分钟

我的教授不会接受-他允许你使用Python吗?不允许,但他允许我使用交换程序。。他想让我不用内置函数来做。。我就是做不好。。我想,在排序之后,我必须得到所有可能的组合,相互减去,得到最小值。然后我会用最低的答案显示这两个组合。你不必得到所有可能的组合,只需要得到相邻组合之间的差值大小。相邻的,如果最近的一对是第二个输入和第九个输入呢?对不起,我只是混淆了…如果在找到组合之前对列表进行排序,则最近的一对只能由相邻的数字组成。因为如果列表被排序,并且数字不是相邻的,那么它们之间有一个数字将与其中一个形成较短的对。显然,
enumerate
是不允许的:)如果
enumerate
被禁止,那么
range()
甚至
len()
呢?“一定有什么是允许的,”琼克莱门茨说,“哦,我错过了这个。好吧,没有使用它就提供了一个答案。但在某些时候,我甚至不确定OP是否应该使用Python!我认为@Duncan说得对,
itertools
可能不是预期要交的(事实上也不是必需的——我相信大多数讲师自然会对使用不希望在那时使用的模块产生怀疑)-但我发现很难接受
枚举
,这是不允许的。。。但哦,好吧……我不确定,但我创建了一个包含很长if代码的程序,我仍在致力于将其转换为循环……我对python中的for循环并不太熟悉……我将尝试上面建议的代码……是的,Duncan先生,我已经完成了您所说的。。我使用while循环8次。。它相当长,但它的工作:D我不能张贴在这里,因为它是非常长的。。谢谢大家的帮助:)