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

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

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

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

自然言語処理

自然言語処理は、日常的に使用される自然言語をコンピューターに処理させる技術やソフトウェアの総称です。

Q&A

4回答

3883閲覧

Python リスト内の文字列の重複の削除

tsuboi

総合スコア3

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

自然言語処理

自然言語処理は、日常的に使用される自然言語をコンピューターに処理させる技術やソフトウェアの総称です。

0グッド

0クリップ

投稿2020/09/17 08:19

編集2020/09/17 15:53

前提・実現したいこと

以下のように、リストに入っている単語の重複の削除を行いたい。
いろいろ重複を削除する方法を試しましたが、重複を削除することができません。
set(), dict.fromkeys(), 新しいリストを用意し、if文で重複する単語をリストに追加する方法も試しました。

出力される単語は、<class 'spacy.tokens.span.Span'>という風に結果が出力されます。
重複削除後
重複削除後

重複削除前
重複削除前

dict.fromkeys()で重複削除後の出力される単語の数を表示した物です。
結果より、同じ単語でも違う単語として、判断しているます。

{会議中: 1, 会議中: 1, 画像: 1, 画像: 1, 画像: 1, 画像: 1, リモート会議: 1, 会議開始時: 1, 会議終了後: 1, お気に入り登録した画像: 1, その関連語句: 1, 関連語句: 1, 一時停止できる他: 1, 広がるような画像: 1, キーワード: 1, お気に入り登録すること: 1, 表示: 1, 広告制作: 1, データアーティスト: 1, テキスト化した議事録: 1, スマホ画面: 1, 内容: 1, 内容: 1, こと: 1, こと: 1, こと: 1, 視覚的なイメージ: 1, 販売: 1, 分析: 1, 独自アルゴリズム: 1, 「Inspiration Wall: 1, 11月: 1, 7月6日: 1, ツリー形式: 1, 利用: 1, ツール: 1, PC: 1, デザインスタジオ: 1, ソフト: 1, 自動: 1, 自動: 1, フォトストックサービス: 1, API: 1, 価格: 1, スマホ: 1, 語句: 1, リアルタイム: 1, デザイン: 1, 外部: 1, 月額課金制: 1, スクリーン: 1, スクリーン: 1, AI: 1, AI: 1, AI: 1, 方式: 1, 将来: 1, 言葉: 1, 会話: 1, 会話: 1, 会話: 1, 電通子会社: 1, 会議: 1, 発想: 1, マイク: 1, アイデア出し: 1, QRコード: 1, 類語: 1, BIRDMAN: 1}

該当のソースコード

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

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

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

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

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

can110

2020/09/17 09:08

実際に試したコードと出力の結果を記載ください。
TakaiY

2020/09/17 09:16

特に重複削除前と後の対象のlistを出力するコードと結果が見たいです。
tsuboi

2020/09/17 09:17

コメントありがとうございます。 コードの修正は行いました。出力した結果は一番上の写真です。
quickquip

2020/09/17 09:35

最後に print(type(answer_list[0])) した結果を付け加えると解決が早くなるかもしれません。 (分かる人が見たら推測可能かもしれませんが)
TakaiY

2020/09/17 09:50

普通、文字列のリストをprintすると、 >>> print(l) ['foo', 'bar', 'baz'] このように、シングルクオーテーション(')で囲われていたいるするはずなんですよ それが無いのはなぜなのかが、上の質問の答でわかりますね。
tsuboi

2020/09/17 09:56

<class 'spacy.tokens.span.Span'>という結果が出力されました。 このトークンが属する文節という、意味です。
quickquip

2020/09/17 10:21 編集

情報は、編集して質問に追記するようお願いします。
TakaiY

2020/09/17 10:51

<class 'spacy.tokens.span.Span'> なのは、answer_list[0] ですか?それとも、answer_list そのものですか? おもしろそうだったので、spacyをちょっと見てみましたが、ここで文字列だと:思われているものはたぶん、Token のインンスタンスでしょう。 なので、.text で中身を取り出してやってから、重複削除すれば目的のものが作れそうですね。
quickquip

2020/09/18 01:35

情報が減ってしまって手が出せなくなってしまいました。 > 出力される単語は、<class 'spacy.tokens.span.Span'>という風に結果が出力されます。 これに対応するコードがないので、質問を読んでも何のことかわからない感じになっています。 この欄は「質問への追記・修正」欄ですし、わざわざクリックしないと読めません。 「情報は、編集して質問に追記するようお願いします」というのは、質問と「質問への追記・修正」欄を両方読まないといけない状態にはしないでください、必要な情報はすべて質問に集約してくださいという意味です。
guest

回答4

0

{会議中: 4, 会議中: 4, 画像: 4, 画像: 4, 画像: 4, 画像: 4, リモート会議: 4, 会議開始時: 4, 会議終了後: 4, お気に入り登録した画像: 4, その関連語句: 4, 関連語句: 4, 一時停止できる他: 4, 広がるような画像: 4, キーワード: 4, お気に入り登録すること: 4, 表示: 4, 広告制作: 4, データアーティスト: 4, テキスト化した議事録: 4, スマホ画面: 4, 内容: 4, 内容: 4, こと: 4, こと: 4, こと: 4, 視覚的なイメージ: 4, 販売: 4, 分析: 4, 独自アルゴリズム: 4, 「Inspiration Wall: 4, 11月: 4, 7月6日: 4, ツリー形式: 4, 利用: 4, ツール: 4, PC: 4, デザインスタジオ: 4, ソフト: 4, 自動: 4, 自動: 4, フォトストックサービス: 4, API: 4, 価格: 4, スマホ: 4, 語句: 4, リアルタイム: 3, デザイン: 4, 外部: 4, 月額課金制: 4, スクリーン: 4, スクリーン: 4, AI: 3, AI: 3, AI: 3, 方式: 4, 将来: 4, 言葉: 4, 会話: 4, 会話: 4, 会話: 4, 電通子会社: 4, 会議: 3, 発想: 4, マイク: 4, アイデア出し: 4, QRコード: 4, 類語: 4, BIRDMAN: 4}

出力結果を出力したところ、上記の結果になったことから、人からしたら同じ単語でも、別のものとして判断しています。

投稿2020/09/17 09:11

tsuboi

総合スコア3

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

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

TakaiY

2020/09/17 09:54

やはり、「会議中」などはクオーテーションで囲われていないので、文字列ではない「何か」になっています。
guest

0

すでにある回答のようにsetにするのが定番ですが、dictのキーとして登録すると、出現頻度が得られたりします。

python

1l = list('pneumonoulttamicroscopicsilicovolcanoconiosis') 2freq = {} 3for c in l: 4 freq[c] = freq.get(c, 0) + 1 5 6print(freq) 7 8uniq_list = list(freq(keys)) 9print(uniq_list)

出力

text

1{'p': 2, 'n': 4, 'e': 1, 'u': 2, 'm': 2, 'o': 9, 'l': 3, 't': 2, 'a': 2, 'i': 6, 'c': 6, 'r': 1, 's': 4, 'v': 1} 2 3['p', 'n', 'e', 'u', 'm', 'o', 'l', 't', 'a', 'i', 'c', 'r', 's', 'v']

投稿2020/09/17 09:00

TakaiY

総合スコア12819

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

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

tsuboi

2020/09/17 09:05

コメントありがとうございます。 set(), dict.fromkeys(), 新しいリストを用意し、if文で重複する単語をリストに追加する方法も試したのですが、上記に記した結果が出力されてしまいます。
TakaiY

2020/09/17 09:17

重複削除前と後の対象リストを出力したコードと結果を見せていただけますか。
guest

0

重複を除去する簡単な方法としてlistをいったんsetにしてやるとよいです。

Python

1l = list('cbcda') 2print(l) # ['c', 'b', 'c', 'd', 'a'] 3l = list(set(l)) 4print(l) # ['b', 'a', 'c', 'd']

<class 'spacy.tokens.span.Span'>という結果が出力されました。

リストの要素を文字列に変換するとよいでしょう。

Python

1class S(object): 2 def __init__(self, s): 3 self.s = s 4 5 def __repr__(self): 6 return self.s 7 8l = [S(s) for s in list('abcbd')] 9print(l) # [a, b, c, b, d] 10 11l = list(set(map(str,l))) 12print(l) # ['d', 'b', 'a', 'c']

投稿2020/09/17 08:47

編集2020/09/18 00:40
can110

総合スコア38278

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

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

0

Python

1lst = # あなたのリスト 2lst = sorted(set(lst), key=lst.index) 3print(lst) 4```setで重複削除

投稿2020/09/17 08:47

ForestSeo

総合スコア2720

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問