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

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

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

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

Q&A

解決済

3回答

1375閲覧

出力結果を指定した文字列に入れ替えたい

shamimatsu

総合スコア22

Python 3.x

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

0グッド

0クリップ

投稿2018/07/15 14:21

編集2018/07/15 14:40

前提・実現したいこと

python初心者です。
1ならA、2ならB、のように結果を指定した文字列に入れ替えたいです。
良い方法がございましたら教えていただきたいです。

追記(説明不足でした)----
質問用に仮の値を書いてしまいました。
やろうとしていることはmidiデータの音程を数値で出力できるのですが
その結果を英語表記のABCDEFGに入れ替えたいです。

num = [1, 2, 3] str = ['A', 'B', 'C'] for n in num: print(n)

今の状態ですと
1
2
3
と出力されますが
A
B
C
となるようにしたいです。
よろしくお願い致します。

試したこと

replace、dictなど試そうとしましたが使いこなせませんでした。

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

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

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

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

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

LouiS0616

2018/07/15 14:28

単にstrの中身を順に出力するだけでは?それとも num = [3, 2, 1] のときは C, B, A と出力したいとか、そういうことでしょうか。
shamimatsu

2018/07/15 14:41

すみません、説明不足でした。質問内容を更新しました。
guest

回答3

0

ベストアンサー

python

1num = [1, 2, 3] 2str = ['A', 'B', 'C'] 3 4# 数字->文字、の対応を保存するdictを用意 5num2str = {n:s for n, s in zip(num, str)} # 内包表記を使った記述 6 7# 上記は次のと同じ結果になります。 8# num2str = { 9# 1: 'A', 10# 2: 'B', 11# 3: 'C' 12# } 13 14# キーである数字で要素にアクセス。 15for n in num: 16 print(num2str[n]) 17 18# 登録されていないキーにアクセスするとエラーが発生します。 19print(num2str[4])

strはPythonの予約語のひとつなので、変数名には使わないことをオススメします。


補足

dictはキーの重複は許されませんが、valueの重複は問題がありません。

Python

1num2str = { 2 440: 'A', 3 880: 'A', 4 1760: 'A' 5}

ただし、これで変換してしまうと元の音程が不定になるので

Python

1# 数値->文字列 2num2str = { 3 440: 'A4', 4 880: 'A5', 5 1760: 'A6' 6} 7 8# 文字列->数値 9str2num = {v: k for k, v in num2str.items()}

としておくと、数値と文字列を行き来できていいかもしれませんね。

投稿2018/07/15 14:41

編集2018/07/15 15:10
tachikoma

総合スコア3601

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

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

shamimatsu

2018/07/15 15:36

回答ありがとうございます。 コードを試したところ上手くいきました。補足は大変参考になりました。
guest

0

やろうとしていることはmidiデータの音程を数値で出力できるのですが

その結果を英語表記のABCDEFGに入れ替えたいです。

こんな感じで辞書を作れば良さそうですね。

Python

1convert_table = { 2 k: chr(ord('A') + k - 1) for k in range(1, 8) 3} 4 5nums = [1, 2, 6, 4, 3, 7, 5] 6for num in nums: 7 print( 8 convert_table[num] 9 )

実行結果 Wandbox

plain

1A 2B 3F 4D 5C 6G 7E

投稿2018/07/15 14:56

LouiS0616

総合スコア35660

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

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

shamimatsu

2018/07/15 15:45

回答ありがとうございます。 コードを試したところ上手くいきました。 chr、ordは初めて見たので調べようと思います。
guest

0

python

1num = [1, 2, 3] 2str = ['A', 'B', 'C'] 3 4dict = {1:'A', 2:'B', 3:'C'} 5 6for n in dict.values(): 7 print(n) 8# A B C 9

こういう事でしょうか?
参考

投稿2018/07/15 14:48

grilled_python

総合スコア237

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

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

shamimatsu

2018/07/15 15:41

回答ありがとうございます。 問題を解決することが出来ました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問