2012-03-28 22 views
4

私はプログラムを表示してインベントリレポートを作成していますが、私はforループの代わりにリストの理解にどのように置くことができるのだろうかと思っていました...このすべてのpythonの専門用語ではなく、私はforループの形をしているものは、リストの内包表記のように表現することができるということである知っているからnoobの....すべてのヘルプはforループからリストの理解へ

def rowSum(TotSize,data,row,col): 
    """Calculates the sum of each row in a given 2 dimensional list and stores 
it into a given one dimensional list""" 
    for i in range(row): 
     sum = 0 
     for j in range(col): 
      sum += data[i][j] 
     TotSize[i] = sum 
+0

本当にリストの理解が欲しいですか?これは 'map'と' sum'の仕事のように見えます( 'map'とリスト内包は同じアイデアを表現するには本当に異なる方法です)。 –

+0

"* forループの形をしたものは、リストの理解として表現することもできます*" - これは実際には当てはまりません。他のリストの関数によってその要素が明示的に**定義されているリストは、リストの理解として書くことができます: 'newList = [otherListのxのf(x)]'。これは 'map'と多くの言語で同じです:' newList = otherList.map(f) '。いくつかのリストは、1Dセルオートマトン、2D動的プログラミングテーブル、または副作用を伴う関数(あなたのrowSumの 'sum'のような)のように、簡単に表現することができません。 (あなたのように合計を書いたり、 'reduce'を使います) – ninjagecko

+1

"とし、それを "に保存します。戻り値を使用して値を返します。 –

答えて

7

あなたをいただければ幸いですコードは本質的には

TotSize[:] = map(sum, data) 

と同等です。第1のrowの行と第1のcolの列だけでなく、 TotSizeは、dataの行数に一致するようにサイズ変更されます(TotSizeはリストです)。

結果を格納するリストを渡す理由がわかりません。 Pythonでは、あなたは、通常、単純にそのリストを返したい:

def row_sums(data): 
    return map(sum, data) 

今では...それがすべてで、このために関数を定義する価値があるかどうかは疑問だ

6

私はあなたの質問を誤解しているかもしれませんが、あなたが求めていますこのようなもの?

>>> testdata = [[5, 6, 8], [], range(8), [42]] 
>>> ToTSize = [sum(row) for row in testdata] 
>>> ToTSize 
[19, 0, 28, 42] 
関連する問題