3

次の方法でオブジェクトをリストに追加する行を作成しました

>>> foo = list()
>>> def sum(a, b):
...      c = a+b; return c
...
>>> bar_list = [9,8,7,6,5,4,3,2,1,0]
>>> [foo.append(sum(i,x)) for i, x in enumerate(bar_list)]
[None, None, None, None, None, None, None, None, None, None]
>>> foo
[9, 9, 9, 9, 9, 9, 9, 9, 9, 9]
>>>

この線

[foo.append(sum(i,x)) for i, x in enumerate(bar_list)]

pylint W1060 式は何も割り当てられていませんが、既に foo リストを使用して値を追加しているため、List Comprehension 行を何かに割り当てる必要はありません。

私の質問は、プログラミングの正確さの問題です

リスト内包表記をやめて単純な for 式を使うべきですか?

>>> for i, x in enumerate(bar_list):
...      foo.append(sum(i,x))

または、リスト内包表記と何も割り当てないの両方を使用する正しい方法はありますか?

答え

@user2387370、@kindall、@Martijn Pieters に感謝します。残りのコメントについては、list() を使用していないため append を使用します。これは単純化された例であるため、i+x は使用していません。

私はそれを次のように残しました:

histogramsCtr = hist_impl.HistogramsContainer()
for index, tupl in enumerate(local_ranges_per_histogram_list):
    histogramsCtr.append(doSubHistogramData(index, tupl))
return histogramsCtr
4

3 に答える 3

7

副作用のためだけにリスト内包表記を使用することは一般的に嫌われていると思うので、この場合は for ループの方が優れていると思います。

しかし、いずれにせよ、あなたはただすることができませんでしたfoo = [sum(i,x) for i, x in enumerate(bar_list)]か?

于 2013-07-30T20:56:24.260 に答える
3

リスト内包表記は絶対にやめるべきです。の終わり。

  • コードを読んでいる人を混乱させています。副作用のリストを作成しています。
  • 再び破棄するリストを作成するために、CPU サイクルとメモリを使用しています。

単純化したケースでは、リスト内包表記を直接使用できた可能性があるという事実を見落としています。

[sum(i,x) for i, x in enumerate(bar_list)]
于 2013-07-30T20:57:10.370 に答える