2016-05-26 12 views
2

私はGISソフトウェアのQGIS用のプラグインを開発しています。私はQTableWidgetを作成し、そこから値を抽出したい:あまりにも多くのforループを使用すると混乱しますif文とelse文

Image

問題がある、私は最後の数行まで、正常に動作するよう、forループやifelse文の多くを使用しています。 print constraint_nameは、最後の値 "Example_2"だけを出力するので、ロジックに従うことはできません。私はそれに対応するelseの文からそれを取ることができるし、それは正しくすべての値を出力しますが、私は条件の内側にそれを設定する必要があります。

qTable = self.dockwidget.tableWidget # QTableWidget 
example_group = root.findGroup('Main group') # Group containing sub groups 
all_items = [] 
gis_map = QgsMapLayerRegistry.instance().mapLayersByName("Map")[0] # Layer map in QGIS 
idx = gis_map.fieldNameIndex("Rank") # Get "Rank" attribute field from gis_map 
for row in range(qTable.rowCount()): 
    for col in [0]: # For first column "Constraint name" 
     constraint_item = qTable.item(row, col)        
     constraint_name = str(constraint_item.text()) 
    for col in [1]: # For second column "Rank" 
     item = qTable.item(row, col) 
     item_string = str(item.text()) 
     all_items.append(item_string) 
     for group in example_group.children(): # Search for specific group 
      if group.name() == "Sub group": 
       if len(set(all_items)) == 1: # If all items are the same 
        # If "Rank" field exists in layer map 
        if idx == -1: 
         print 'success' 
        else: 
         print 'fail'       
       else: 
        if idx == -1: 
         print constraint_name 
        else: 
         print 'fail' 

はこれを整理し、まだ正しい結果を取得する方法はありますか?はるかに効率的なソリューションを私に向けるコメンターへ

+4

'COLのために[ 0]: '??何かそこに魚がいるようです。 –

+2

第2レベルの 'for'ループはどちらも役に立たない。 'for col [0]'と 'for col [1]'はそれぞれ既知の値で正確に1回実行されるので、何もリファクタリングすることはできません。 –

+2

また、 'len(set(all_items)) 'の値に関係なく、' idx == -1'なら 'fail'を出力するので、あなたの一番内側の' if'文は逆転しているようです。 –

答えて

2

心からの感謝、ここで働く作業コードは(私はそれがさらに洗練することができます確信している):

qTable = self.dockwidget.tableWidget 
example_group = root.findGroup('Main group') 
all_items = [] 
gis_map = QgsMapLayerRegistry.instance().mapLayersByName("Map")[0] 
idx = gis_map.fieldNameIndex("Rank") 
for row in range(qTable.rowCount()): 
    constraint_item = qTable.item(row, 0)        
    constraint_name = str(constraint_item.text()) 
    item = qTable.item(row, 1) 
    item_string = str(item.text()) 
    all_items.append(item_string) 
    for group in example_group.children(): 
     if group.name() == "Sub group": 
      if idx == -1: 
       if len(set(all_items)) == 1: 
        print 'success' 
       else: 
        print 'fail'       
      else: 
       print constraint_name 
関連する問題