2017-06-28 3 views
-3

私はリストのリストを繰り返し、各リストの最大値と最小値を記録しています。 配列のインデックスをキーとして使用してリストの最大値と最小値を格納する次のコードがあります。Python辞書の最大値と最小値を見つけます。それらは別個のキーに属している必要があります。

def maxAndMin(arrays): 
     i=0 
     d= {} 
     for a in arrays: 
      maxNum = max(a) 
      minNum = min(a) 
      d[i] = [minNum, maxNum] 
      i+=1 
     print d 

私は辞書ともそれらが異なるキー(同じ配列では見られない)からにマッピングされている要件と最小値の最大値を見つけたいです。まだ実用的な解決策を見つけることができません。

編集:入力:[[1,3,4]、[0、2、5]]。 max = 5、min = 1またはmax = 4、min = 0を返すようにします。 5と0は同じリストにあるので、max = 5、min = 0ではありません。

Edit2:最初に値の中の最大値を見つけ、最小値を見つけ、最小値が最大値と同じでないことを要求します。

+3

は、最大値と最小値が* *同じに対応しない場合、あなたがしたいですかどう出力入力リストと期待される結果 – RomanPerekhrest

+0

を投稿キー? – user2357112

+0

@ user2357112私は最初に最大値を求めてから最小値を求め、最小値に最大値と同じ値を持たないことを要求します。 – codeAligned

答えて

1

と言うと、あなたは辞書を使って作業していますが、サンプル入力は実際にはリストのリストです。最も簡単な方法であなたの要件を翻訳、我々は2回のパスでこれを達成することができます

は、最小を見つけ、最小が最大と同じキーを持っていないことを を必要とし、最初の値の最大値を検索します。

>>> from operator import itemgetter 
>>> l = [[1, 3, 4], [0, 2, 5]] 
>>> flattened = ((i, e) for i, sub in enumerate(l) for e in sub) 
>>> max_idx, maxval = max(flattened, key=itemgetter(1)) 
>>> minval = min(e for i, sub in enumerate(l) if i != max_idx for e in sub) 
>>> print("Max:", maxval, "Min:", minval) 
Max: 5 Min: 1 

上記以下のと本質的に同等である:

>>> l = [[1, 3, 4], [0, 2, 5]] 
>>> maxval = float('-inf') 
>>> max_idx = 0 
>>> for i, sub in enumerate(l): 
...  for e in sub: 
...   if e > maxval: 
...    maxval = e 
...    max_idx = i 
... 
>>> minval = float('inf') 
>>> for i, sub in enumerate(l): 
...  if i != max_idx: 
...   for e in sub: 
...    if e < minval: 
...     minval = e 
... 
>>> print("Max:", maxval, "Min:", minval) 
Max: 5 Min: 1 
関連する問題