python中只有基本数据类型的最接近的十个整数对
我真的需要代码方面的帮助。用户需要输入10个整数,程序必须显示最接近的一对。我可以使用itertools来完成,但我的教授不会接受.sort()、min()、enumerate()等。。。我需要手动操作。以下是我使用itertools生成的代码: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
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我不能张贴在这里,因为它是非常长的。。谢谢大家的帮助:)