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

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

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

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

2回答

410閲覧

Python lambda式を使ったもの どこがダメなのか初心者にも分かりやすく教えて欲しいです

kuiojl

総合スコア1

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

1グッド

0クリップ

投稿2024/07/13 15:47

実現したいこと

今度は任意の基準で「最も〇〇」なものを選び出せるようにします。
longest_stringを変更し、longer_stringの代わりに引数で指定した任意の関数を比較に使うmost_somethingを書きなさい。
適当な文字列のリストと、文字列2個を引数として文字数の少ない方を返すlambda式を引数としてmost_somethingを呼び出し、最も文字数の少ないものが選ばれることを確認しなさい。

発生している問題・分からないこと

自分なりにやってみたが、結果が出力されずどこが間違っているのかも具体的にわからない。
また、4個あるとlambda式を使って16通りのものを考慮しないといけないため、moji1,moji2という変数を使ってみたが、スッキリできる方法を教えていただきたいです

該当のソースコード

#最もなものを選び出せる関数を定義する def most_something(alist): #4つの文字列の要素からなるリストを作成 alist=[toefl,ielts,sat,toeic] #適当な文字列のリストの要素の定義づけ first=alist[0] second=alist[1] third=alist[2] fourth=alist[3] #lambda moji1==first or second moji2==third or fourth shorter=lambda moji1,moji2: moji2 if len(moji1)>len(moji2) else moji1 result=most_something(alist,shorter) print(result)

試したこと・調べたこと

  • teratailやGoogle等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他
上記の詳細・結果

なかなか解決につながるものを見つけられなかった

補足

特になし

tatsu99👍を押しています

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

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

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

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

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

otn

2024/07/13 16:02 編集

何処が間違っているか?という以前に、プログラムとしての体を為してないです。 今回の課題の前に、「longest_string という関数を使って、文字列のリストを与えると、その中で最長の長さの文字列を返す」という関数の課題があったはずですが、その正解プログラムをまず理解するのでしょうかね。 > 4個あるとlambda式を使って16通りのものを考慮しないといけないため、 配列(list型)や、ループによる繰り返しという概念も理解しましょう。
guest

回答2

0

回答ではありません。

まず、前の質問がこれですよね。
https://teratail.com/questions/gf2ywn9m980g2h

さて、今回の課題ですが、2つに別れています。
1つめは

longest_stringを変更し、longer_stringの代わりに引数で指定した任意の関数を比較に使うmost_somethingを書きなさい。

で、2つめは

適当な文字列のリストと、文字列2個を引数として文字数の少ない方を返すlambda式を引数としてmost_somethingを呼び出し、最も文字数の少ないものが選ばれることを確認しなさい。

です。質問にあるコードはこれのどちらに対する回答でもありませんね。

1つめは、前の質問ある、longest_stringを改変して新しい関数を作れということです。
書いてあることを整理すると、
・引数に、比較に使う関数を追加する。
・受け取った関数を比較に使う。
・名前をmost_somethingに変更する
です。 まずはこれだけやってみてください。 プログラムの構造はほとんど変らないはずです。
やってみてわからないことがあれば、質問してください。

作ったmost_somethingがちゃんと想定どおり動くか確認するために、作ってあるlonger_stringを使うこともできます。longer_stringを使って、動作を確認するのであれば、

python

1moji_list=["sakurai", "ono", "ninomiya", "aiba", "matsumoto"] 2 3print(most_something(moji_list, longer_string)

これができれば、2つめです。 こんどは、lambda式を使ってmost_something を呼び出してくださいということです。
ただし、引数に渡す関数をlambda式で表現せよということです。

lambda式については習っているはずです。 設問では、
「文字列2個を引数として文字数の少ない方を返すlambda式」
を定義して使えとありますね。 こlambda式は作れますか。

投稿2024/07/14 04:49

TakaiY

総合スコア14315

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

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

0

適当な文字列のリストと、文字列2個を引数として文字数の少ない方を返すlambda式を引数としてmost_somethingを呼び出し、

前回の質問と同様に再帰関数を使うと以下の様になります。

python

1def most_something(alist, func): 2 match len(alist): 3 case 0: return None 4 case 1: return alist[0] 5 case 2: return func(*alist) 6 case _: return func(alist[0], most_something(alist[1:], func)) 7 8alist = ['toefl', 'ielts', 'sat', 'toeic'] 9shorter = lambda moji1, moji2: min(moji1, moji2, key=len) 10result = most_something(alist, shorter) 11print(result) 12 13# sat

投稿2024/07/13 16:12

melian

総合スコア21118

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

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

kuiojl

2024/07/14 07:14

ご丁寧にありがとうございます。二つ目の引数のfuncとはなんですか?
melian

2024/07/14 07:25

「文字列2個を引数として文字数の少ない方を返すlambda式(無名関数)」のことです。今回の場合は shorter になります。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.31%

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

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

質問する

関連した質問