2016-09-20 14 views
0

私は(x、y)を含む2D配列リストを持っていますが、このリストを(x^2 + y^2の平方根) )。私はこのリスト内の各2次元配列の平方根を取ると、ソートされたリストの最小値を返す場合2次元配列を数式で並べ替える

(20,10) 
(3,4) 
(5,6) 
(1.2,7) 

、出力は次のとおりです:

(3,4) 
(1.2,7) 
(6.5,4) 
(5,6) 
(20,10) 
例えば

は、私は、これらの4つの2Dのリストを持っています

コード:

M=[ [20,10],[3,4],[5,6],[1.2,7],[6.5,4]] 

S = np.sqrt(M)

= []

プリントの範囲(0、H)におけるiに対する

for j in range(0,w): 

    a[i] =s[i][j]+a[i] 

任意のアイデア?

+1

あなたは何を試してみましたか?私は[このリストのリストを並べ替える上でのこの質問]から始めます(http://stackoverflow.com/questions/4174941/how-to-sort-a-list-of-lists-by-a-specific-index-of -the-inner-list)とキー機能に特に注意を払う – JGreenwell

+0

実際には、ArduinoのJavaで開始し、それをfinshedと私はPythonでそれを変換したい –

+0

Javaはコンパイラを使用するか、単にComparableインタフェースを実装する - Pythonはsorted (またはちょうどソート方法)、またはforループを使用したので、どのようにこれをやろうとしましたか? – JGreenwell

答えて

0
はタプルのリストにあなたのデータ構造を切り替えて、その後、ソート(効率のためのメモ化して)キー機能として、最小限の値を使用して

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) 

OUTPUT

[(3, 4), (1.2, 7), (6.5, 4), (5, 6), (20, 10)] 

ソートするだけなので、平方根を計算する必要はありません。正方形で十分です。

+0

今すぐリアルタイムで私はImage(x、y)から印刷されたリストを持っています。このAlgourithmのようにソートしたいのですが、このリストに新しい座標が追加されたとき自動的に –

+0

@HamoodElholandy、良いフォローアップのSOの質問の作成。コンテキストを提供するために、これまで実装したコードとこの質問へのポインタを含める必要があります。ここ – cdlane

+0

はコード 次のとおりです。https:?//drive.google.com/file/d/0B0om5UtdFzWJd3VjNEVwVGxvWHc/view USP =ここ を共有するには、エラーです: https://drive.google.com/file/d/ 0B0om5UtdFzWJcG9CdGNqclBoZWM /ビュー?USP =出力に –

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 
+0

大きなリストが覚えておくために、私のソート方法はしばらく時間がかかります!! – BLang

+0

この具体的なコメント「このループは変数ファクトに格納された階乗を計算する」は、一般的なコメントの価値についての私の信念を確認します... – cdlane

+0

bahaha私はそれを取るのを忘れていました。 !私のコードを実行し、それは動作します! – BLang

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 
+0

おそらくない良いアイデア作業イム 注意を印刷タプル。 – cdlane

+0

今すぐリアルタイムで私はいくつかのオブジェクトのイメージ(x、y)から印刷されたリストを持っていますこのリストは、追加または削除することができますeny座標オブジェクトリスト –

+0

私は私のリストの私のコードにあなたの偉大なAlgourithmを取ったとき、私は、このエラーが発生しました:s.sort(sorting_func) はAttributeError:あなたのオブジェクトsはないリストでなければなりません@HamoodElholandy「タプル」オブジェクトが属性「ソート」 –

関連する問題