在对值进行排序时,如何使索引和值一起移动



我用python语言写了这段代码:

utilizArray = [0.7, 0.6, 0.4, 0.3, 0.8] 
M = [] 
for i in range(len(utilizArray)): 
M.append([i, utilizArray[i]]) 
print(M)
print() 
for passnum in range(len(utilizArray) - 1,0,-1): 
for i in range(passnum): 
if M[i][1] < M[i+1][1]: 
temp = M[i][1] 
M[i][1] = M[i+1][1] 
M[i+1][1] = temp 
print() 
print(M) 

这是输出:

[[0, 0.7], [1, 0.6], [2, 0.4], [3, 0.3], [4, 0.8]]
[[0, 0.8], [1, 0.7], [2, 0.6], [3, 0.4], [4, 0.3]]

我希望输出是这样的(每个值都有相应的索引(:

[[4, 0.8], [0, 0.7], [1, 0.6], [2, 0.4], [3, 0.3]]

你能给我一个密码吗。

您应该根据第一个元素进行比较,但将整个元素作为一个单元进行交换:

utilizArray = [0.7, 0.6, 0.4, 0.3, 0.8]
M = []
for i in range(len(utilizArray)):
M.append([i, utilizArray[i]])
print(M)
print()
for passnum in range(len(utilizArray) - 1,0,-1):
for i in range(passnum):
if M[i][1] < M[i+1][1]:
# the [1]s from these lines were removed
temp = M[i]
M[i] = M[i+1]
M[i+1] = temp
print()
print(M)

或者,只需使用内置的sort函数,使用第二个元素作为键(这种方法也比气泡排序快得多(:

utilizArray = [0.7, 0.6, 0.4, 0.3, 0.8]
M = []
for i in range(len(utilizArray)):
M.append([i, utilizArray[i]])
print(M)
print()
M.sort(key=lambda x: x[1], reverse=True)
print()
print(M)

您可以使用enumerate:获取列表元素的索引

array = ['a', 'b', 'c']
for index, letter in enumerate(array):
print(index, letter)
Output:
>0 a
>1 b
>2 c

最新更新