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

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

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

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

Q&A

解決済

2回答

716閲覧

python3.x list 一つの要素内に様々な情報がある場合の要素の抽出方法

lobelia_axis

総合スコア1

Python 3.x

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

0グッド

0クリップ

投稿2020/06/21 09:07

編集2020/06/21 09:07

#実現したいこと

python

1["Aさん   値段   メーカー   著作名   4桁の番号(xx-xx)", 2 "Bさん   値段   メーカー   著作名   4桁の番号(xx-xx)", 34 "XXさん   値段   メーカー   著作名   4桁の番号(xx-xx)"," ]

のようなリストにおいて
1.特定の値段の人が買った著作名を重複なしでリストとして打ち出す。
2.その後値段を特定の範囲に拡大(例:500~800円)して同様のことをする。
3.全要素において最後の4桁の判別番号の前2桁をあと2桁で割り、余りが一桁である所有者の名前をリストとして打ち出す。
4.最後に全員のメーカーをkeyに、著者名をvalueにして辞書型として打ち出す。

##やったこと

python

1 2yen = 500 3new_list = [] 4yen2 = [] 5for money in info: 6 if str(yen) in age: 7 print(money.split()) 8 if str(yen) in money: 9 new_kist.append(money[8:40]) 10 for i in new_list: 11 if "500" in i: 12 age2.append(i) 13 print(set(yen2))

split関数で一つのリスト内にある様々な要素を個別にリスト化しスライスで不要な部分を削除、その後著作名をリストアップし最後にset型で重複を消してプリントする
というものなのですが記述したコード以降どのように動かしてもうまくいかず結果2~4にも進めない状況になってしまいました。
よろしければ解決策をご教授いただけると幸いです。

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

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

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

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

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

guest

回答2

0

まず 0 番目の段階として、次の文字列を

Python

1"Aさん   500   講談社   teratail君   60-40"

次のようなリストに変換する手順を入れる必要がありそうです。

Python

1["Aさん", 500, "講談社", "teratail君", "60-40"]

名前(Aさん)、タイトルなどに空白が含まれたり、項目が抜けている場合があるとやや面倒ですが、ない場合は

Python

1nlist=[] 2for line in info: 3 e = line.split() 4 nlist.append([e[0], int(e[1]), e[2], e[3], e[4]])

として新しい nlist を作成すれば、あとは ForestSeo さんの回答に沿って解決可能と思います。

投稿2020/06/21 18:30

cugel

総合スコア220

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

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

lobelia_axis

2020/06/22 02:18

ありがとうございます。お二方のおかげで解決いたしました。
guest

0

ベストアンサー

Python

1lst = [ 2 "Aさん 500 講談社 teratail君 60-40", 3 "Bさん 1500 朝日 teratail様 80-78", 4] 5lst = [s.split() for s in lst] 6 7l = [i[0] for i in lst if int(i[4][0:2]) % int(i[4][3:6]) < 10] # 3 8d = {i[2]:i[3] for i in lst} # 4 9 10print(l) 11# ['Bさん'] 12print(d) 13# {'講談社': 'teratail君', '朝日': 'teratail様'} 14```5行目で2次元にしています。 15[内包表記](https://note.nkmk.me/python-list-comprehension/)で書いています。 16*** 17リスト内包表記を使うと、例えば以下のコードは、 18```Python 19l = [1, 2, 3] 20new = [] 21for item in l: 22 new.append(str(item)) 23print(new) 24# ['1', '2', '3'] 25```以下のように省略できます。 26```Python 27l = [1, 2, 3] 28new = [str(item) for item in l] 29print(new) 30# ['1', '2', '3']

投稿2020/06/21 09:48

編集2020/06/21 22:41
ForestSeo

総合スコア2720

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

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

lobelia_axis

2020/06/21 10:50

解答ありがとうございます。 解説までしていただいているところ恐縮ですが今回の問題になっているリストが["Aさん 500 講談社 terateil君 60-40"]のように一つの""の中に様々な情報が付加されている状態になってしまっていて…。 この状態の場合はなにか解決法などございますでしょうか。 分かりずらくまた不躾な質問申し訳ございません。
lobelia_axis

2020/06/21 11:44

2については1の場合値段が一つだったものを100円から500円の間など幅を持たせて処理をしたいということです。 分かりずづらくて申し訳ございません。
ForestSeo

2020/06/21 22:29 編集

> 一つの""の中に様々な情報が付加されている じゃあ split ですね。cugel さんもやってますが、ちょっと追記しますね。 > 1の場合値段が一つだったものを100円から500円の間など幅を持たせて えーと、値段の範囲を指定?
ForestSeo

2020/06/21 21:53 編集

追記しました。このコードでいけると思います。
lobelia_axis

2020/06/22 02:18

ありがとうございます。お二方のおかげで解決いたしました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問