2012-02-13 6 views
1

長さが異なる2つのリストがあります。それぞれのアイテムを整数と比較したいと思います。上記整数は、それはそれがであることをループのために壊すと言われている基本的forループを使用せずにリスト内のすべてのアイテムを整数と比較する方法

for list in listoflists: 
    if {anyiteminlist} > 70: 
     continue #as in skip to next list 

    {rest of code here} 

、私が言う必要があります。

+1

この宿題はありますか? –

+0

入れ子のforループを使用しない理由は何ですか?リストにある内部メソッドは、O(n)検索を使用して、要素がある数(70)より大きいかどうかを調べます。ネストされたO(n)検索を避ける必要が本当に必要な場合は、別の/カスタムデータ構造を使用してください。 – Alan

+0

それは問題ではありませんが、あなたの擬似コードでは "if {anyiteminlist}> 70:continue"と書いていますが、 "このリストにあるものが* 70 *以下であれば、次のリストでループを続ける"と書いています。私は誤読しているのですか、それともほとんど反対ですか? – DSM

答えて

1

まあ呼ばれ、ここで

if any(x>70 for x in the_list): 

一部()挟ん便利ですanyと呼ばれる組み込み関数は、私はおそらくそれはジェネレータ式を使用しないと思います、ですが、誰から他には、まだこのことを示唆している、そしてそれは(明示的な)ネストされたループはありません。

>>> lol = [[1,2,3],[4,40],[10,20,30]] 
>>> 
>>> for l in lol: 
...  if max(l) > 30: 
...   continue 
...  print l 
... 
[1, 2, 3] 
[10, 20, 30] 
+3

'max'は短絡しませんが、' any'はリストの最初の要素が閾値より大きい場合、 'any'はTrueと評価されます。 'max'は、リストの最初の要素が閾値を超え、残りの部分を実際に見る必要がなくても、最大値を見つけるためにあらゆる値を調べます。 – PaulMcG

+0

@PaulMcGuire:うん。最大値を計算する唯一の可能な利点は、明示的なループを避けることです。私がそれを行うと考えることができる唯一の理由は、それが質問された場合です。(そして、私はここでこの問題を意味しません。 ) – DSM

+1

私は、 "no for loop"条件が、内側ループの内側から外側ループを続ける方法についての何らかの疑問のためかもしれないと考えます。内側のループの「続行」は、外側のループではなく内側のループを継続するだけです。 – PaulMcG

0
「このリストに何かが70を超えている場合は、次のリストでループを続けます」

Python 2.5以上を使用している場合は、list comprehensionsでany()関数を使用できます。 any機能は短絡評価を行い、それは、すぐに、リスト内の整数が見つかったとしてTrueを返します

for list in listoflists: 
    if any(x < 70 for x in list): 
     continue 

:あなたはこのような組み込み関数anyを使用することができます

for list in listoflists: 
    if any([i > 70 for i in list]): 
    continue 
+5

anyの中にlist-compを必要とせず、必要としません。短絡を防ぎます。 – DSM

+0

for i in listはまだforループのように見えます。 – Alan

+0

@Alan - 生成される値を定義するために 'for'を使用するジェネレータ式です。この形式では、高速のCコードで実行されるforループであり、遅いPythonコードでは実行されません。 – PaulMcG

0

組み込みのanyを使用するのが最も分かりやすい方法です。代わりに、forループをネストしてそれを中断することもできます(for-else構造のいくつかの使用法の1つ)。

for lst in listoflists: 
    for i in lst: 
     if i > 70: 
      break 
    else: 
     # rest of your code 
     pass 
13

それは組み込みlist()をシャドウ、変数名としてlistを使用しないでください。そこgenerator expression

+0

完璧に感謝します! – rptynan

1

をあなたはこれにそれを短縮することができます:D

for good_list in filter(lambda x: max(x)<=70, listoflists): 
    # do stuff 
関連する問題