Pythonはbuilt-in min
functionを持っています。しかし、私はそれが自分自身を書くための良い学習練習だと思う。
test
関数の修正版を作成することによって、最小要素を含むサブリストを見つける関数を書くことができます。
重要なアイデアは、各サブリストの最小値を見つけることです。新しい最小値が見つかると、その最小値のサブリストが保存されます。
以下のコードでは、より意味のあるものにするために、関数名をtest
からminimum
に変更しました。
def minimum(list1):
''' Finds smallest item in list1 '''
x = list1[0]
for i in list1:
if i < x:
x = i
return x
def least(list2d):
minseq = list2d[0]
x = minimum(minseq)
for seq in list2d[1:]:
i = minimum(seq)
if i < x:
x = i
minseq = seq
print('In {} the least number is {} found in sublist {}'.format(list2d, x, minseq))
# Test
data = [[2, 4, 3], [1, 7, 9, 4], [6, 7, 5]]
least(data)
出力
In [[2, 4, 3], [1, 7, 9, 4], [6, 7, 5]] the least number is 1 found in sublist [1, 7, 9, 4]
しかし、私たちは私たちのために、最小のサブリストを見つけるために、ビルトインmin
機能を使用することにより、よりコンパクトな方法でこれを書くことができます。ここでのトリックは、min
を呼び出して各サブリストの最小項目を見つけ出し、それらの最小値を使用してどのサブリストが最小のものかを判断することです。
def least(list2d):
minseq = min(list2d, key=min)
x = min(minseq)
print('In {} the least number is {} found in sublist {}'.format(list2d, x, minseq))
このバージョンでは、最小アイテムを2回持つサブリストの最小値を計算するため、わずかに非効率です。我々はmin
ジェネレータ式渡すことができないようにするには:
def least(list2d):
x, minseq = min((min(seq), seq) for seq in list2d)
print('In {} the least number is {} found in sublist {}'.format(list2d, x, minseq))
式は、各サブリストとその最小値のタプルを作成し、発電機、それらのタプルは、最小の最小を含むタプルを見つけるために、外側min
コールに渡されます。2つ以上のタプルが最小値を結んでいる場合、タプル自体を比較して勝者を決定します。
フォーマットあなたのコードください –
あなたは**再帰またはスタック/キュー**使用する必要があります。リストはネストされている可能性があります。つまり、アイテム内の最小アイテム(別の類似リスト)を検索する必要があるため、すべてのアイテムの結果を比較します。 –
また、常にネストのレベルを1つにしますか?あるいは、n次元のリストをサポートしたいですか? –