質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

3回答

1091閲覧

lambda式がエラーになる

katosei

総合スコア32

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2018/12/28 14:43

目的

配列の値から、数字だけ抽出したい。
lambda式でまとめて実行したい。

コード

python

1#!/bin/env python3.6 2import re 3 4l=["aaa111","bbb222","ccc333"] 5 6def xxx(data): 7 return re.sub('\D','',data) 8print("ret="+xxx(l[0])) 9#成功する 10 11ret=list(lambda data : re.sub('\D','',data) ,l) 12print("rets="+ret) 13#エラーになる 14

lambda式の方が、何故失敗するのかわからず、困っています。
昨日も似たような質問をしてしまって申し訳ないですが、お願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

まずは xxx() をつかって l に対する処理をかいてみてください。
質問文にある方法 list(xxx, l) はエラーになります。

list(map(xxx, l)) ならうまくいきます。
xxx の部分を lambda で置き換えます。
list(map(lambda x : re.sub('\D','',x) ,l))

lambda を使わなくても内包 for で同じ結果を得ることはできます。
[xxx(x) for x in l]
[re.sub('\D','',x) for x in l]

操作例
イメージ説明

投稿2018/12/28 20:45

katoy

総合スコア22324

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ラムダ式そのものに問題はありませんが、listで囲っている意図がわかりません。

やりたいこととしてはmapなのかな?

python

1ret=list(map(lambda data : re.sub('\D','',data) ,l))

投稿2018/12/28 14:53

hayataka2049

総合スコア30933

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ラムダ式は関数定義の代替であって、それ以上の特殊な意味は持っていません。
例えばこのように使うことができます。

Python

1>>> def add(a, b): 2... return a + b 3... 4>>> add(1, 2) 53 6>>> add(2, 3) 75 8>>> 9>>> add = lambda a, b: a + b 10>>> add(1, 2) 113 12>>> add(2, 3) 135 14>>> 15>>> (lambda a, b: a + b)(1, 2) 163 17>>> (lambda a, b: a + b)(2, 3) 185

関数を引数に取って特殊な仕事をする関数を高階関数と呼びます。
例えば filter や map、functools.reduce などがそれにあたります。

Python

1>>> def triple(n): 2... return 3 * n 3... 4>>> it = map(triple, [1, 2, 3]) 5>>> list(it) 6[3, 6, 9] 7>>> 8>>> triple = lambda n: 3 * n 9>>> it = map(triple, [1, 2, 3]) 10>>> list(it) 11[3, 6, 9] 12>>> 13>>> it = map(lambda n: 3 * n, [1, 2, 3]) 14>>> list(it) 15[3, 6, 9]

ラムダ式が有用なのは匿名関数を作ることができること、つまりは使い捨てられることです。


註: 話がややこしくなるため、『呼び出し可能オブジェクト』という表現を避けています。

投稿2018/12/28 15:32

編集2018/12/28 15:34
LouiS0616

総合スコア35660

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問