2017-10-31 11 views
-5

リストには、その中のすべての数字の違いを知るためのリストがあります。アルゴリズム的には、それぞれの項目の減算の絶対値をリストから取り、減算の合計の平均を求めるように思えます。 絶対値の部分は心配しないでください。それは私のアプリケーションにのみ関連しています。例えばリスト内のすべての数字の平均差を取得する(Python)

list_a = [1,2,3,4] 

list_a0 = (abs(1-2) + abs(1-3) + abs(1-4))/3 = 1+2+3 = 2 
list_a1 = (abs(2-1) + abs(2-3) + abs(2-4))/3 = 1+1+2 = 1.33 
list_a2 = (abs(3-1) + abs(3-2) + abs(3-4))/3 = 2+1+1 = 1.33 
list_a3 = (abs(4-1) + abs(4-2) + abs(4-3))/3 = 3+2+1 = 2 
avg = (lista0 + lista1 + lista2 + lista3)/4 = 1.67 

私のpythonに新しいです。誰かがこれを行うにはlist_aをループする方法のヒントを教えてくれますか?

+4

私は任意の減算が起こって表示されていない... – Tobias

+2

私は従っていません。私は、forループを使用してではなく、ネストされたリストの内包にこれを押しつぶししようと助言、itertoolsを使用あなたの質問には関係していないようです。これらの減算はどこで起こっていますか?あなたが示している合計は何ですか? – CoryKramer

+0

リストの理解は、* lists *を作成するためのものです。あなたは 'リスト'を作成していますか?そうでなければ、あなたはリストの理解を望まない。もしあなたがそうであれば、素敵で読みやすいなら、あなたはリストの理解を望むかもしれません。 –

答えて

0

あなたの例から、あなたが幸いにも長さ2のリストのすべての順列をループしようとしている、itertoolsはちょうどそのための機能を有していることが表示されます:あなたはしたくない場合

>>> import itertools 
>>> list_a = [1,2,3,4] 
>>> diffs = [abs(e[1] - e[0]) for e in itertools.permutations(list_a, 2)] 
>>> sum(diffs)/len(diffs) 
1.6666666666666667 

をあなたの例...

>>> list_a = [1,2,3,4] 
>>> diffs = [] 
>>> for i, e in enumerate(list_a): 
     for j, f in enumerate(list_a): 
      if i != j: diffs.append(abs(e-f)) 

>>> sum(diffs)/len(diffs) 
1.6666666666666667 
関連する問題