n = int(raw_input())
s = raw_input().strip().split(' ')
ar = index = [0]*n; done = [False]*n
for a in range(n): ar[a] = int(s[a])
k=0
for a in range(5):
m = 1000000001
for i in range(n):
if done[i]: continue
if ar[i] < m: m = ar[i]
if m == 1000000001:
sys.stdout.write('-1\n')
break
#print m
for i in range(n):
if ar[i] == m:
index[k] = i
k+=1
done[i]=True
print index
该算法非常简单。 ar是一个数组n(> = 5)整数。我打算存储索引中阵列的前5个最小整数的基于0的位置。这个简单的Python代码有什么问题?
服用Ñ作为输入,Ñ空间隔开的整数之后被输入到下一行。
的问题是很奇怪的 - 为对以下输入:
7
6 17 5 3 13 8 10
当我去掉在代码#print m
,它打印3 3 0 3 0
(预期输出为3 5 6 8 10
);还发生了IndexError
(这只是真正问题的一个症状)。
可变做工作正常(它包含布尔值,其中,如果done[i]
是True
,然后ar[i]
不应该考虑的名单,同时寻找min(ar)
我做了很多的调试通过印刷在不同位置的变量值,但不能弄明白什么
谢谢!工作!我不知道通过编写a = b = [],python只是指向与a相同的列表,b – Rushil 2012-02-06 11:55:28
@Rushil:Python对象总是按引用传递,而不是按值传递。 “a = b = []”与“b = []; a = b”相同,所以你最终得到的两个变量都指向同一个对象。 – 2012-02-06 11:58:31
@Ricardo:谢谢你的理解。 – 2012-02-06 12:34:57