2011-12-16 8 views
6

私は、最小限のC値と最大C + F値を返すようにしたいPythonで多次元の最小/最大を返しますか?

[ [[a,b,c],[d,e,f]] , [[a,b,c],[d,e,f]] , [[a,b,c],[d,e,f]] ... ] etc. 

の形式でリストを持っています。これは可能ですか?

+11

はい、すべてが可能です。何を試しましたか? – JBernardo

+0

Hmmm。宿題? –

+0

各要素の0番目のクラスターから最大の2番目のインデックスを取得しようとすると、試行min(list [0] [2])など。後者をどうやって行うかわからない。 –

答えて

15

min(c for (a,b,c),(d,e,f) in your_list) 

最大c+f

max(c+f for (a,b,c),(d,e,f) in your_list) 

例:

>>> your_list = [[[1,2,3],[4,5,6]], [[0,1,2],[3,4,5]], [[2,3,4],[5,6,7]]] 
>>> min(c for (a,b,c),(d,e,f) in lst) 
2 
>>> max(c+f for (a,b,c),(d,e,f) in lst) 
11 
+0

これはうまくいくようです。ありがとうございました!あなたはこのようにすることができるか分からなかった(CのBのAフォーマット) –

+0

私はそれが好きです。リストの解説が最初に説明するのに最善の方法であるかどうかはわかりませんが、素敵なコードです。 –

+1

ああ、ところで、ジョン、これはあなたがこのようなコードのために欲しい魔法の言葉です: "リストの理解"。 –

1

あなたの気になるアイテムだけを含むものにあなたのリストをマップする必要があります。ここで

は、これを行うの1つの可能な方法である:

x = [[[5, 5, 3], [6, 9, 7]], [[6, 2, 4], [0, 7, 5]], [[2, 5, 6], [6, 6, 9]], [[7, 3, 5], [6, 3, 2]], [[3, 10, 1], [6, 8, 2]], [[1, 2, 2], [0, 9, 7]], [[9, 5, 2], [7, 9, 9]], [[4, 0, 0], [1, 10, 6]], [[1, 5, 6], [1, 7, 3]], [[6, 1, 4], [1, 2, 0]]] 

minc = min(l[0][2] for l in x) 
maxcf = max(l[0][2]+l[1][2] for l in x) 

minmax通話の内容が"generator"と呼ばれるもので、フィルタリングされたデータに元のデータのマッピングを生成するための責任があります。最小cについて

4

List comprehension救助に

a=[[[1,2,3],[4,5,6]], [[2,3,4],[4,5,6]]] 
>>> min([x[0][2] for x in a]) 
3 

>>> max([x[0][2]+ x[1][2] for x in a]) 
10 
1

もちろん可能です。 2つの要素で構成されるリストがリストに含まれているので、リスト自体になります。あなたの基本的なアルゴリズムは、あなたのリストを想定

for each of the pairs 
    if c is less than minimum c so far 
     make minimum c so far be c 
    if (c+f) is greater than max c+f so far 
     make max c+f so far be (c+f) 
1

あるmy_listというに格納されています

min_c = min(e[0][2] for e in my_list) 
max_c_plus_f = max(map(lambda e : e[0][2] + e[1][2], my_list)) 
関連する問題