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

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

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

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

Q&A

解決済

2回答

315閲覧

辞書の利用 辞書とリスト内包表記についてです

Ryoruri

総合スコア3

Python 3.x

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

0グッド

0クリップ

投稿2023/06/04 09:18

編集2023/06/06 12:04

質問をみてくださりありがとうございます
下に書くスクリプトファイルについての質問です。
なぜ実行結果の一つ一つの値には 'a_10' のような最初と最後にシングルクォーテーションが出てくるのでしょうか?

・エラーメッセージ

はありません。

該当のソースコード

data ={'a':10, 'b':20, 'c':30, 'd':40, 'e':50}
[x + '_' + str(data[x]) for x in data]

実行結果
['a_10','b_20','c_30','d_40','e_50' ]

python ### 試したこと 参考書にあった問題なのですがなぜこうなるのかがわかりませんでした。実行は成功しました。 追加点  私は、 data ={'a':10, 'b':20, 'c':30, 'd':40, 'e':50} [x + '_' + str(data[x]) for x in data] において、dataに'a':10がバインドされているとすると、[a+'_'+str(10) for x in data] なので、結果として[a_10,b_20,c_30,d_40,e_50] となるのが正しいと思っていたのです。どこで 'a_10' のようなシングルクォーテーションが発生したのか謎でした。 そこで類似したものとして dc={'a':100,'b':200,'c':300} >>> list(dc.items()) [('a' ,100), ('b' ,200), ('c',300)] のような途中でタプルにまとめて取り出しているケースがあったのですがこのように、タプルのようにシングルクオーテーションが急に出てきたという考え方でいいのでしょうか? #今後について この問題は今後もより多くの情報を自身で取り入れて解決させていこうと思います。

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

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

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

下記のような質問は推奨されていません。

  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

また依頼した内容が修正された場合は、修正依頼を取り消すようにしましょう。

退会済みユーザー

退会済みユーザー

2023/06/04 13:23 編集

del
Ryoruri

2023/06/04 09:33

前にさせていただいた問題についてもう少し考えさせていただきたく思います。 明日までに納得がいくように努めますのでもう少しお時間をいただけませんか?
quickquip

2023/06/05 01:51 編集

対話実行環境で ['a10', 'b20'] と入力すると [a10, b20] が表示されると思ってるのでしょうか?
Ryoruri

2023/06/04 23:41

data ={'a':10, 'b':20, 'c':30, 'd':40, 'e':50} [x + '_' + str(data[x]) for x in data] 実行結果↓ [a_10,b_20,c_30,d_40,e_50] とならなかったので、なぜなのか原因が突き止められませんでした。
quickquip

2023/06/05 01:52 編集

ですから、試す前の時点で、対話実行環境に ['a10', 'b20'] と入力した時に [a10, b20] が表示されると思っていたということですか? と聞いたのです。。。。 つまり『そう思っていたのに['a10', 'b20'] と表示される。これはなぜ?』と、そういう意図の質問でしたか? という確認です。 あるいは 対話実行環境に ['a_10','b_20','c_30','d_40','e_50'] と入力すると ['a_10', 'b_20', 'c_30', 'd_40', 'e_50'] と表示されるとは分かっていたが、 data ={'a':10, 'b':20, 'c':30, 'd':40, 'e':50} [x + '_' + str(data[x]) for x in data] を入力すると[a_10,b_20,c_30,d_40,e_50]になるはずだと思ったということですか? 訂正: replと書くところをreprと書いてました。紛らわしいので対話実行(環境)にしました。すみません。
Ryoruri

2023/06/05 10:54

コメントありがとうございます。 「あるいは...になるはずだった」 の部分のように考えておりました。 私の考えすぎであって、これがpythonの仕様というだけなので理由はないのでしょうか?
quickquip

2023/06/05 11:07 編集

対話実行環境に ['a_10','b_20','c_30','d_40','e_50'] と入力すると ['a_10', 'b_20', 'c_30', 'd_40', 'e_50'] と表示される と同時に 内包表現で **全く同じデータを作った時は別の動作をする** だろう と思っていたことになりますが、それはどうしてなんでしょう? としか…… (そのあたりでもう少し別の視点がでてこないなら、すでに付いている回答以外に追加することはないように感じました)
Ryoruri

2023/06/05 14:23

詳しく中身を見るためにいかのようにしました。 data ={'a':10, 'b':20, 'c':30} [x + str(data[x]) for x in data] 実行結果 ['a10','b20','c30'] このようになったため私はリスト内包表記によってa10 の両端にシングルクォーテーションがついたと予測できました。 この考えは正しいのでしょうか?
guest

回答2

2

ベストアンサー

対話型実行環境でのことですかね。
対話型実行環境では、実行した文の値をrepr関数で文字列化した物を表示します。(Noneだけは特別扱いのようです)
reprとは、https://docs.python.org/ja/3/library/functions.html#repr

repr(object)
オブジェクトの印字可能な表現を含む文字列を返します。この関数は多くの型について、eval()に渡されたときと同じ値を持つようなオブジェクトを表す文字列を生成しようとします。

つまり、その値をPythonプログラムの中に書くときの文字列表現に変換しますので、そのままエディタで編集中のプログラムファイルにコピペできます。

Python

1a = ['a_10','b_20','c_30','d_40','e_50' ]

引用符が無い形式で表示されてしまうと、そのままコピペすると、

Python

1a = [a_10,b_20,c_30,d_40,e_50 ]

となり、a_10とかは変数名と見なされてしまうので、元通り文字列と解釈して貰うためには、コピペ後に手作業で引用符の追加が必要です。

プログラムにコピペできる形式でなくて、自分独自の形式が欲しいときは、自分独自で文字列に変換します。

投稿2023/06/04 10:01

編集2023/06/04 10:04
otn

総合スコア83024

Ryoruri, quickquip👍を押しています

下記のような回答は推奨されていません。

  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

また依頼した内容が修正された場合は、修正依頼を取り消すようにしましょう。

回答へのコメント

Ryoruri

2023/06/04 10:06

今日中に納得できるほどpythonに強くなく、理解に時間がかかってしまうのでベストアンサーは24時間まっていただけませんか? 現在読み解いています。
otn

2023/06/04 10:20

一言で言うと、「対話型実行環境での結果表示は、そのままプログラムにコピペできる形式で表示される」
Ryoruri

2023/06/06 12:06

otnさんの情報に解決の糸口が見られそうだったのでベストアンサーとさせていただきます。
guest

2

なぜ実行結果の一つ一つの値には 'a_10' のような最初と最後にシングルクォーテーション型出てくるのでしょうか?

深い理由は特にありません。文字列であることが分かりやすいようにそうなっているだけです。

投稿2023/06/04 09:27

退会済みユーザー

退会済みユーザー

総合スコア0

Ryoruri, TakaiY👍を押しています

下記のような回答は推奨されていません。

  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

また依頼した内容が修正された場合は、修正依頼を取り消すようにしましょう。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.68%

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

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

質問する

同じタグがついた質問を見る

Python 3.x

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