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

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

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

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

Q&A

解決済

2回答

294閲覧

Python 内容と件数が異なるが対応する2つのリストを整合させたい

SMGLA

総合スコア3

Python 3.x

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

0グッド

1クリップ

投稿2022/05/13 17:55

■前提:実現したいこと

非エンジニア、Python初学者です。

Pythonで、内容と件数が異なるが対応する2つのリストを整合させたいと考えています。

Python

1source_list = ["りんご", "オレンジ", "ぶどう", "バナナ", "いちご"] 2target_list = ["abcりんご", "ぶどうdef", "abcバナナ"]

source_listの文字列がtarget_listの要素内にあればそれらをそのままタブ区切りでペアにし、なければ”Missing"という文字列とペアにして、整合した新たなリストを作りたいです。リストはsource_listの方がtarget_listよりも長いです。どちらのリストにも重複はありません。

期待する出力結果:

Python

1new_list = ["りんご abcりんご", "オレンジ Missing", "ぶどう ぶどうdef", "バナナ abcバナナ", "いちご Missing"]

■ 発生している問題

期待する出力結果が得られません。

実際の出力結果:

Python

1new_list = ['りんご abcりんご', 'ぶどう ぶどうdef', 'いちご Missing']

■ 該当のソースコード

Python

1new_list = [] 2 3for source in source_list: 4 target_item = target_list[0] 5 if source in target_item: 6 new_list.append(f"{source} {target_item}") 7 source_list.remove(source) 8 target_list.remove(target_item) 9 else: 10 new_list.append(f"{source} Missing") 11 source_list.remove(source) 12 13print(new_list)

■ 試したこと

source_list の要素を順にtarget_listの1つ目の要素と照合し、同じ文字列が存在すればそれらを新しいnew_listに転記した上でそれぞれから削除し、存在しなければ"Missing"と共にnew_listに転記して同様にに削除すれば、扱うのは常にtarget_listの1つ目の要素で固定できると考えました。しかし、対応する要素のない「オレンジ」と対応する要素のある「バナナ」については何も出力されないというよくわからない結果になります。

■ 環境情報

Google colaboratory 上で作業しています。
Python 3.7.13
Mac OS 12.3.1
よろしくお願いいたします。

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

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

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

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

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

guest

回答2

0

ベストアンサー

python

1from pprint import pprint 2 3source_list = ["りんご", "オレンジ", "ぶどう", "バナナ", "いちご"] 4target_list = ["abcりんご", "ぶどうdef", "abcバナナ"] 5 6new_list, target_list_copy = [], target_list[:] 7for source in source_list: 8 for target in target_list_copy: 9 if source in target: 10 new_list.append(f"{source} {target}") 11 target_list_copy.remove(target) 12 break 13 else: 14 new_list.append(f"{source} Missing") 15 16pprint(new_list, width=50) 17 18# 19['りんご abcりんご', 20 'オレンジ Missing', 21 'ぶどう ぶどうdef', 22 'バナナ abcバナナ', 23 'いちご Missing']

投稿2022/05/14 01:04

melian

総合スコア19705

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

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

SMGLA

2022/05/14 15:08

実は最初にこの方法を試したのですが、breakを使っていなかったためにうまくいかなかったことがわかりました。オリジナルのリストから直接要素を削除してしまうのはよくないのですね。 スライスを使用したリストの複製やpprintの存在についても知らなかったので、大変勉強になりました。ありがとうございました。
guest

0

python

1source_list = ["りんご", "オレンジ", "ぶどう", "バナナ", "いちご"] 2target_list = ["abcりんご", "ぶどうdef", "abcバナナ"] 3 4new_list = [] 5 6for source in source_list: 7 x = [y for y in target_list if source in y] 8 if len(x) > 0: 9 a = x[0] 10 else: 11 a = "Missing" 12 new_list.append(f"{source} {a}") 13 14print(new_list)

投稿2022/05/13 20:30

takasima20

総合スコア7458

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

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

SMGLA

2022/05/14 15:17

source_listの要素ごとに、それがtarget_listの要素内に存在すれば新たなリストに抽出して、リストが空なら”Missing"であると判定するのですね。1つしかない要素をリストに格納するという考えに至らなかったので、とても勉強になりました。ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問