新しいアカウントで始めました。

身の回りの出来事や写真が中心です。

pythonのforとreduce奥が深い?

2024-04-19 08:39:53 | Python

出力のMとNを見ると、結果は同じです。

配列(pythonではリスト)の配列です。自分的には、関数型から程遠い

Mがシックリきますけど。

 

しかし、Nでもforを使ってます。

Cametanさんによれば、誤解がないとして、forがある場面では

reduceが使えるか?考える、でしたが、もしかしたら、違うかも知れません。

 

今までの例を見ると、lambda x, y: y + [y(-1) + x], [ 1,2,3,4,5]が

配列の配列を作っている部分と思われます。が、その部分だけ切り取って

print出来ない。配列の配列が出来ていることの、確認です。それが出来ない。

 

もしかしたら、配列の配列は出来ていないのかも知れませんね?

数字の並びだけは同じですけど。

 

 

 


コメント (3)    この記事についてブログを書く
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« 病とともに生きる、昨日は訪... | トップ | 病とともに生きる、ケアマネ... »
最新の画像もっと見る

3 コメント

コメント日が  古い順  |   新しい順
コールバック関数 (cametan_42)
2024-04-19 17:40:07
> しかし、Nでもforを使ってます。

これはリスト内包表記二重掛けにすべきでしょう。

>>> [[j for j in range(1, i + 1)] for i in range(1, 6)]
[[1], [1, 2], [1, 2, 3], [1, 2, 3, 4], [1, 2, 3, 4, 5]]
>>>

> 配列の配列を作っている部分と思われます

いや、違うでしょ。

> lambda y, x: y + [y[-1] + x]

と言うコールバック関数は単に配列を作ってるだけ、えす。

y -> 配列
[y[-1] + x] -> 配列

配列 + 配列はオーバーライドにより単に配列になります。配列と配列を単にappendしてるだけですね、ここは。
返信する
参考になりました! (isam)
2024-04-21 09:12:28
 forの二重ループと配列+配列->配列、参考になりました。
 まだよくわからないのが、lambda式の部分です。まえに単純な+の場合、(((1+2)+3)+4)みたいな、と展開される、が有りました。
 それを適用したら?どうなると悩んでます?
[1,2,3,4,5]は一度通過するだけですか?
返信する
reduceの動き (cametan_42)
2024-04-21 10:16:03
これ、ですよね?

reduce(lambda y, x: y + [y[-1] + x], [1, 2, 3, 4, 5], [0])

STEP1:

x => 1, y => [0]なので
y + [y[-1] + x] => [0] + [0 + 1] => [0] + [1] => [0, 1]


STEP2:
x => 2, y => [0, 1]なので
y + [y[-1] + x] => [0, 1] + [1 + 2] => [0, 1] + [3] => [0, 1, 3]

STEP3:
x => 3, y => [0, 1, 3]なので
y + [y[-1] + x] => [0, 1, 3] + [3 + 3] => [0, 1, 3] + [6] => [0, 1, 3, 6]

STEP4:
x => 4, y => [0, 1, 3, 6]なので
y + [y[-1] + x] => [0, 1, 3, 6] + [6 + 4] => [0, 1, 3, 6] + [10] => [0, 1, 3, 6, 10]

STEP5:
x => 4, y => [0, 1, 3, 6, 10]なので
y + [y[-1] + x] => [0, 1, 3, 6, 10] + [10 + 5] => [0, 1, 3, 6, 10] + [15] => [0, 1, 3, 6, 10, 15]

終了、と。
yは「初期値」または「前回の計算結果」、xは[1, 2, 3, 4, 5]から要素を順繰りに引っこ抜いてきています。
yは「前回の計算結果(リスト)」で、y[-1]は「前回の計算結果(リスト)の最後の要素」です。
上のプロセス(STEP)を良く見てみて下さい。
全部、コールバック関数(ラムダ式)が指定した通りに計算が行われています。
返信する

コメントを投稿

ブログ作成者から承認されるまでコメントは反映されません。

Python」カテゴリの最新記事