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

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

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

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

MacOS(OSX)

MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

Python

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

Q&A

解決済

3回答

1553閲覧

リストに関する問題演習

Kyohei

総合スコア23

Python 3.x

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

MacOS(OSX)

MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

Python

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

0グッド

0クリップ

投稿2018/10/11 05:19

編集2018/10/14 09:19

環境:Python3系、Mac OS
下記の出題問題についてコードをご教授ください。

問題:次のタスクを処理するプログラムを書きなさい。

例えば次のようなリストがあるとします。
spam = ['apples','bananas','tofu','cats']

リストの値を引数としてとり、要素をカンマとスペースで並べ、最後の要素の前にandを挿入した文字列
を返す関数を書きなさい。例えば、上記のspamをこの関数に渡すと、
'apples, bananas, tofu, and cats'を返すものとします。
ただし、関数は任意のリスト値を渡してもよいようにします。

※また、「関数は任意のリスト値を渡してもよい」とはどういうことでしょうか?

どうぞ、よろしくお願いいたします。

追記:

下記が私のコードです。↓

spam = ['apples','bananas','tofu','cats'] def change_Spam(spam): spam.remove('cats') spam.append('and cats') change_Spam(spam) print(spam)

RUN結果は下記の通りです。↓
['apples', 'bananas', 'tofu', 'and cats']
最後の要素を変更はできましたが、答えとなる
'apples, bananas, tofu, and cats'
と返すことができません。

どうぞご教授お願い致します。

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

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

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

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

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

LouiS0616

2018/10/11 05:20

現状のコードをご提示ください。このままではただの丸投げです。また、問題の出典も明記してください。
mather

2018/10/11 05:21

課題の丸投げはいけません。まずは自分で実装してうまくいかない部分を提示してください。課題そのものへの質問は課題を出した人に直接聞いたほうがいいです。
Kyohei

2018/10/11 05:31

LouiS0616様、mather様 ご指摘ありがとうございます。後ほど自身のコードを追記致します。
opyon

2018/10/11 05:32

>「関数は任意のリスト値を渡してもよい」 文脈からすると引数のリストは1つで中身の要素が可変ということでしょうね。引数で複数のリストを受け取る可変長引数では無いと思います。
mather

2018/10/11 05:41

Pythonで「任意のリスト値」をテスト観点で考えると、 []. [1], ["hoge", "fuga"], [[1,2,3], "test"] などがありますね。どこまでを想定しているかわからないので、本当は課題を作った方に例示してもらうべきかと思います。
quickquip

2018/10/11 08:56

この手の"課題"は、意図的に曖昧に記述されていて、「このようなことが求められていると判断してこういう仕様で実装しました」と"説明できる"ことが求められていると思います。
Kyohei

2018/10/14 09:21

opyon様 ありがとうございます!可変長引数初めて聞きました。勉強になります:)
Kyohei

2018/10/14 09:22

quiqui様 ありがとうございます!
guest

回答3

0

', '.join() で最後の要素以外を結合し、そのあとに ' and ' と最後の要素をくっつけてみてはどうでしょうか。

python

1spam = ['apples', 'bananas', 'tofu', 'cats'] 2 3def list_to_str(lst): 4 string = ', '.join(lst[:-1]) 5 return string + ' and ' + lst[-1] 6 7print(list_to_str(spam)) 8 9assert list_to_str(['A', 'B', 'C']) == 'A, B and C' # OK 10assert list_to_str(['to-hu', 'apple', 'orange']) == 'to-hu, apple and orange' # OK

投稿2018/10/11 05:40

tiitoi

総合スコア21956

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

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

Kyohei

2018/10/14 09:25

tiitoi様 ありがとうございます!! assert???調べて勉強させていただきます:)
guest

0

自己解決

教わりましたjoinを使って再度コードを書いてみました。

spam = ['apples','bananas','tofu','cats'] def change_Spam(spam): spam.remove('cats') spam.append('and cats') change_Spam(spam) print(', '.join(spam))

何とか回答通りにできました。
皆様ご教授いただき誠にありがとうございます。
他にもまだ使ったことのないコード方法を記載していただいておりますので、追って確認させていただきます。

投稿2018/10/15 04:47

Kyohei

総合スコア23

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

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

0

(spamの定義を除いて)一行で書いてみました。

python

1>>> spam = ['apples', 'bananas', 'tofu', 'cats'] 2>>> "".join(e for l in [len(spam)] for i, word in enumerate(spam) for e in [word, ", " if i < l-2 else (" and " if i == l-2 else "")]) 3'apples, bananas, tofu and cats' 4

追記

質問文を読み直したら、「関数を書きなさい」を見落としていたことに気づきました。

python

1>>> spam = ['apples', 'bananas', 'tofu', 'cats'] 2>>> f = lambda spam : "".join(e for l in [len(spam)] for i, word in enumerate(spam) for e in [word, ", " if i < l-2 else (" and " if i == l-2 else "")]) 3>>> f(spam) 4'apples, bananas, tofu and cats' 5>>> f(list("ABCDEFG")) 6'A, B, C, D, E, F and G'

※また、「関数は任意のリスト値を渡してもよい」とはどういうことでしょうか?

長さが任意なのかもしれないし、型が任意という可能性もあるでしょうね。

投稿2018/10/12 00:02

編集2018/10/12 01:00
hayataka2049

総合スコア30933

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

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

Kyohei

2018/10/14 09:24

hayataka2049様 ご丁寧にありがとうございます。 join???色々まだ学んでいないワードがあり勉強になります。
hayataka2049

2018/10/14 21:16

学校とかの課題なら、joinを教わっていない段階で出されたなら使わないで書けということかもしれません。python str.join等のキーワードで検索して機能を掴み、どうすれば同等のものを実現できるか考えれば良いでしょう
Kyohei

2018/10/15 03:51

hayataka2049様ありがとうございます。まずは調べる、肝に命じさせていただきます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問