我有一个包含(x,y)的二维数组列表,但是我想用最小值的等式((x ^ 2 + y ^ 2)的平方根)对此列表进行排序。
例如,我有这四个2D列表:
(20,10)
(3,4)
(5,6)
(1.2,7)
如果我在此列表中取每个2D数组的平方根并返回排序列表的最小值,则输出为:
(3,4)
(1.2,7)
(6.5,4)
(5,6)
(20,10)
守则:
M=[ [20,10],[3,4],[5,6],[1.2,7],[6.5,4]]
S = np.sqrt(M)
A = []
print s
表示范围(0,h)中的i:
for j in range(0,w):
a[i] =s[i][j]+a[i]
有什么想法吗?
答案 0 :(得分:1)
使用列表的内置排序方法:
from math import sqrt
def dist(elem):
return sqrt(pow(elem[0], 2) + pow(elem[1], 2))
def sorting_func(first, second):
if dist(first) < dist(second):
return 1
elif dist(second) < dist(first):
return -1
else:
return 0
bla= [(3, 2), (5, 4)]
bla.sort(sorting_func)
print bla
答案 1 :(得分:0)
下面的代码将解决您的要求,如果您希望了解订购的工作原理,请取消注释打印报表!!
import math
array = [(20,10), (3,4), (5,6), (1.2,7)]
sortList = []
count = 0
tempList = []
placeholder = []
#Compute the Equation of Minimum Value
for x,y in array:
tempList.append(math.sqrt((x**2) + (y**2)))
tempList.append(array[count])
sortList.append(tempList)
tempList = []
count += 1
#Sort list
count = 1
placeholder = sortList[0][:]
##print('ORIGINAL LIST\n', sortList)
while count < (len(sortList)):
if sortList[count - 1][0] < sortList[count][0]:
## print('THIS IS COUNT', count)
count += 1
else:
placeholder = sortList[count - 1][:]
## print("this is placeholder: ", placeholder)
sortList[count - 1] = sortList[count]
## print(sortList)
sortList[count] = placeholder
## print(sortList)
placeholder = []
count = 1
答案 2 :(得分:0)
将数据结构切换为元组列表,然后使用最小值作为关键函数进行排序(使用memoization提高效率):
M = [(20, 10), (3, 4), (5,6), (1.2, 7), (6.5, 4)]
def minimum_value(coordinate, dictionary={}): # intentional dangerous default value
if coordinate not in dictionary:
dictionary[coordinate] = coordinate[0]**2 + coordinate[1]**2
return dictionary[coordinate]
M_sorted = sorted(M, key=minimum_value)
print(M_sorted)
<强>输出强>
[(3, 4), (1.2, 7), (6.5, 4), (5, 6), (20, 10)]
由于我们只是排序,我们不需要计算平方根,正方形就足够了。