2017-05-28 6 views
0

2つのセット(tag_coordinates、tag_id)から返された値を関数から単一のセット(required_info)に更新するコードを記述しました。 required_infoの値を印刷しようとすると、値が2回印刷され、セット内の要素は順序付けされません。私はrequired_infoを印刷した後Setで関数から返された値を追加する方法は?

def GetLabels(taginfo):  #this function gets the value taginfo, from an another code 
    tag_coordinates = set() #set to update tag_coordinates 
    tag_id = set()   #set to update tag_id 
    required_info = set() #set to update required_info 
    r=60 
    for (tag,xy,orient,err,wl,sq) in taginfo: 
     xy2= (int(xy[0]+r*math.sin(math.radians(orient))),int(xy[1]-r*math.cos(math.radians(orient)))) 
     tag_coordinates.add(xy) #corresponding tag_coordinates 
     tag_id.add(tag)   #corresponding tag_id 
     required_info.update(tag_coordinates,tag_id) 
     print required_info 

さて、私が設定tag_coordinatesから対応する値で、二度印刷されたセットを取得します、一緒に配置されていないTAG_ID。助言がありますか?

+0

セットは数学で順序付けされる必要はないため、Pythonで記述されています。 – user1685095

答えて

0

私はあなたが達成しようとしているかわからないんだけど、あなたはペアのセットを望んでいた場合(タグ、座標)

def get_labels(taginfo): 
    return { 
     (tag, calc_coordinates(x, y, orient)) 
     for tag, (x, y), orient, *_ in taginfo 
    } 


def calc_coordinates(x, y, orient): 
    orient_rad = 60 * math.radians(orient) 
    return int(x + math.sin(orient_rad)), int(y - math.cos(orient_rad)) 

1 TAGIDが複数cooridantesを持つことができるなら、あなたはGROUPBY

を使用することができます

groupby(operator.itemgetter(0), get_labels(taginfo))タグで座標をグループ化します。

get_labelsは、ちょうどGetLabelsですが、PEP8準拠表記です。関数は文字が小さく、CamelCaseの代わりにsnake_caseになければなりません。

calc_coordinatesはもう一度このライン

xy2= (int(xy[0]+r*math.sin(math.radians(orient))),int(xy[1]-r*math.cos(math.radians(orient)))) 

から抽出された機能である、それはPEP8準拠していませんでしただと可読性が良いことではなかったです。 orient_sinは、パフォーマンスと可読性を向上させるための単なる一時変数です。私はドメインを知らないので、おそらくそれは醜い名前を与えましたが、あなたはそれを改善することができます。

get_labelsは、ペアのセット(tag_id、座標)を返します。これは、Pythonのset comprehension機能によって定義されます。

+0

あなたが提供したものを理解できません。コメントしていただけますか?私がコードで達成しようとしているのは、(tag_coordinates、tag_id)のペアのセットを一緒に取得することです。私はそれが上記のコードを達成することができます。しかし、同じ値が2回印刷されています。 –

+0

@ George luke私は、 'set of pairs(tag_id、tag_coordinates)'という意味を持っています。私が理解していないのは、あなたが「一緒にいる」ということです。 – user1685095

+0

私は、tag_idに対応するtag_coordinatesを意味しています。 –

関連する問題