2016-10-11 9 views
2

私は変数がリストのリストのどのリストの要素でも見つけようとしています。それがいずれかの要素であれば、continueを使用して次のブロックに移動します。リストのメンバーでない場合は、そのリストの唯一の項目として変数を使用して、リストのリストに新しいリストを作成したいと思います。Python forループのすべての反復で何かが真であるかどうかを調べる

if文が満たされているか、else elseの繰り返しが満たされていないと、どちらの状況も同じ結果、つまりこのブロックを過ぎていることがわかるからです。

for group in groups: 
    if point in group: 
     continue 
    else: 

     # if point not an element of any group, 
      create group in groups with variable as only element 

更新:

うこの作品?それを行うより簡潔な方法はありますか?

for group in groups: 
    if point in group: 
     groupCheck = 1 
    else: 
     pass 
if not groupCheck: 
    # Create a new list including point 
+0

質問は、あなたがグループ内でそれを特定した後に何をしていますか?何もない場合は、見つけた後に戻ってください。これは本当に 'find'と' add'の2つの関数でなければなりません。 – GManNickG

答えて

4
は、あなたのロジックを逆にして、新しいグループを作成するには forループの else句を使用

for group in groups: 
    if point in group: 
    break 
else: 
    create_new_group(point) 

またはany()を使用してください。

if not any(point in group for group in groups): 
    create_new_group(point) 
+0

両方の提案は本当に素敵に見えます:)ありがとうIgnacio – McLeodx

1

if文をループの外に置くのはなぜですか?

found = False 

for group in groups: 
    if point in group: 
     found = True 
     break 

if not found: 
    groups.append([point]) 
+0

これは良い点です、ありがとうございます。 – eeScott

1

関数を作成します。

def check_matches(point, groups): 
    for group in groups: 
     if point in group: 
      return true 
    return false 

if not check_matches(point, groups): 
    groups.append([point]) 

あなたはこれをどうしようとしているものに応じて、この単純なそれを残す、またはより洗練された機能にこれを構築することができます:

def get_groups(point, groups): 
    if not check_matches(point, groups): 
     groups.append([point]) 
    return groups 

groups = get_groups(point, groups) 

あなたが行うことができ、簡単なリスト内包表記のものがありますここでは、Pythonにあなたの明らかな新しさを与えて、私はそれらをお勧めしません。それはあなたを混乱させ、将来間違いを増やすための確実な方法です。

1

組み込みのany()機能を使用してみてください。

if not any(point in group for group in groups): 
    groups.append([point]) 
関連する問題