質問するログイン新規登録
Python 3.x

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

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

Q&A

解決済

4回答

1575閲覧

python list 比較 空白 無視

horusu

総合スコア14

Python 3.x

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

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

0グッド

0クリップ

投稿2019/06/03 12:43

0

0

### やりたいこと
・配列内で空白がランダムに存在。
・文字列が一致するものを除外し、一致しないものをそのまま残したい。

test_list1 = ["田中 太郎","山田 太郎","高橋 太郎","池田 太郎"] test_list2 = ["田中 太郎","山 田 太郎","高橋 太 郎"] →"池田 太郎"のみ抽出したい。("池田太郎"のように空白は削除しない)

やったこと

test = [i.replace(" ","") for i in test_list1] test1 = [k.replace(" ","") for k in test_list2] print(list(set(test)-set(test1))) →["池田太郎"]になってしまう。(["池田 太郎"]にしたい。)

よろしくお願いします。

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

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

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

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

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

guest

回答4

0

イメージ説明

python3

1from itertools import groupby 2 3def keyfunc(v): 4 return v.replace(" ","") 5 6g = [list(g) for (k, g) in groupby(sorted(list12, key=keyfync), key=keyfync)] 7 8[v[0] for v in g if len(v) == 1]

SPACE を削除した値で グルーピングします。
グループの要素数が 1 のものが どちらか一方にしか存在しないものになります。

投稿2019/06/03 13:48

katoy

総合スコア22328

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

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

0

ベストアンサー

以下のような感じでどうでしょうか。

Python

1test_list1 = ["田中 太郎","山田 太郎","高橋 太郎","池田 太郎"] 2test_list2 = ["田中 太郎","山 田 太郎","高橋 太 郎"] 3 4# 空白を除いた辞書に格納 5d1 = {v.replace(' ',''):v for v in test_list1} 6d2 = {v.replace(' ',''):v for v in test_list2} 7 8ret = [] 9for k in (d1.keys() ^ d2.keys()): # d1 or d2 に存在するもののみ 10 if k in d1: 11 ret.append(d1[k]) 12 elif k in d2: 13 ret.append(d2[k]) 14print(ret) # ["池田 太郎"]

投稿2019/06/03 13:08

編集2019/06/03 13:10
can110

総合スコア38352

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

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

horusu

2019/06/03 13:48

ありがとうございます。! dictにしてkeyにすれば、元の値を取り出せますね。!
guest

0

こんな感じでしょうか。

Python

1src1 = ["田中 太郎", "山田 太郎", "高橋 太郎", "池田 太郎"] 2src2 = ["田中 太郎", "山 田 太郎", "高橋 太 郎"] 3 4src2 = [ 5 e.replace(" ", "") for e in src2 6] 7 8dst = [ 9 e for e in src1 10 if e.replace(" ", "") not in src2 11] 12print(dst)

実行結果 Wandbox

['池田 太郎']

質問で set(test)-set(test1) と書いていることから、
残したい要素は必ず片一方にあると仮定してお答えしています。

このように先に比較対象の値を扱いやすく成形すると見通しが付きやすくなります。

投稿2019/06/03 12:58

編集2019/06/03 13:01
LouiS0616

総合スコア35678

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

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

horusu

2019/06/03 13:49

なるほど。 気をつけてコーディングして行きたいと思います。!
guest

0

  1. 全角スペースを半角スペースに置換
  2. 連続した半角スペースを一つのスペースに置換

と、やればいいということですね

#あと、スペースを削除する場合の定義を決めてください

投稿2019/06/03 12:46

編集2019/06/03 12:48
y_waiwai

総合スコア88180

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.30%

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

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

質問する

関連した質問