2016-04-13 15 views
2

単純な問題。ループスルーリスト、最小値が以前の最小値より大きい値を見つける

私はリストのリストを持っていますが、私は各リストの最小値が以前の最小値よりも大きいことを探しています。

リストは個別にソートされ、最初のリストでは最小値を探しています。

例:

my_list = [[3, 5, 8, 14, 18, 28, 30], 
      [4, 6, 7, 9, 13, 15, 17, 19, 22, 26], 
      [2, 11, 21, 24, 32], 
      [1, 10, 12, 16, 20, 23, 25, 27, 29, 31, 33, 34]] 

および予想される出力は次のようになります。

[3, 4, 11, 12] 
+2

を上げるために起こっているfilter

curr_min = min(my_list[0]) minimums = [curr_min] for l in my_list[1:]: curr_min = min(filter(lambda x: (x > curr_min), l)) minimums.append(curr_min) 

を使用することができます'[[4,5,6]、[1,2,3]]、すなわち、後続のリストに最小値がなく、前のリストの最小値よりも大きい場合は? –

+0

良い点、この場合には起こりそうにないので、@ zondoのValueErrorはうまく機能します。 –

答えて

2

それはかなり読めるようになります。

minimums = [] 
minimum = None 
for sublist in my_list: 
    try: 
     minimum = min(x for x in sublist if minimum is None or x > minimum) 
     minimums.append(minimum) 
    except ValueError: # No numbers greater than minimum 
     # Error handling 
1

ます。また、このビルトイン使用して行うことができます各listはすでにソートされているので、nextの機能は

result = [] 
first = my_list[0][0] 
result.append(first) 
for val in my_list[1:]: 
    try: 
     first = next(el for el in val if el > first) 
     result.append(first) 
    except StopIteration: 
     pass 
1

あなたはfilterは空のリストを返す場合、minは、例えばのために期待される出力は何ValueException

関連する問題