のようなもう少しPythonのようにあなたのコードを改革することができます。 Pythonでは、(リストを参照して)反復処理を行い、オブジェクトを直接取得することができます。実際にインデックスを使用する必要はありません。
final = []
for i in listoflists:
count = 0
val = 0
for j in i:
if j != 0:
count += 1
val += j
final.append(float(val)/count)
print final
このコードでは、インデックス化することなく、あなたとまったく同じであるj
は、私たちが得ている実際のサブ項目(番号)です。
あなたがやりたい、Pythonはサブリストを転置便利zip()
機能を持っています。私たちはこれらのリストをzip([1,2],[3,4])
ときに我々は、以下のリスト[1,2] , [3,4]
を持っている場合たとえば、我々はリストのリストの前に*
記号を使用してリストをアンパックすることにより、あなたがやりたいためにこれを使用することができます[(1, 3), (2, 4)]
を取得し、zip()
はこれをサポートしています。前の例に戻って、リストx = [[1,2],[3,4]]
のリストを作成し、*
でxをzipに渡して、われわれが望むものを得ることができます。 zip(*x)
[(1, 3), (2, 4)]
となります。あなたが持っているものと一緒にこれらを組み合わせることで、あなたの望む結果が得られます。
final = []
for i in zip(*listoflists):
count = 0
val = 0
for j in i:
if j != 0:
count += 1
val += j
final.append(float(val)/count)
私たちは、可能な場合は、リスト内のすべての項目を合計し、すでにfilter()
で使用することができますlen()
を知っているにもよりsum()
として複数のそのようなから構築されたいくつかを使用することによって、これを向上させることができます0
を除外します。ドキュメントから:
(アイテムの場合、繰り返し可能なアイテムのアイテム)機能がない場合
だから我々がチェックされているリストは、価値のあるアイテムのが含まれており、0
がある場合ときif 0:
final = []
for i in zip(*listoflists):
if i:
final.append(float(sum(i))/len(filter(None, i)))
print final
失敗した私たちは、いずれかを使用して、さらに一歩進み、機能を圧縮することができます
print [float(sum(i))/len(filter(None,i)) for i in zip(*listoflists)]
注一部:Pythonは、list comprehensions
を提供しているneatestもののこれらの回答のうち、他のものほど最適ではないかもしれませんが、私の答えは組み込み機能だけでやり遂げることができるさまざまな方法に焦点を当てています。
[zip()](https://docs.python.org/3/library/functions.html#zip)を使用してリストのリストを転記し、[sum()](https:// docs。 python.org/3/library/functions.html#sum)を使用して、転置リストの合計を取得します。 – wwii