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

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

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

Python 2.7は2.xシリーズでは最後のメジャーバージョンです。Python3.1にある機能の多くが含まれています。

Python 3.x

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

Python

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

Q&A

解決済

2回答

294閲覧

Pythonの配列にて重複箇所の消去について

TANUKIpro

総合スコア14

Python 2.7

Python 2.7は2.xシリーズでは最後のメジャーバージョンです。Python3.1にある機能の多くが含まれています。

Python 3.x

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

Python

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

0グッド

0クリップ

投稿2018/06/03 19:15

編集2018/06/03 19:33

pythonの配列で詰まってます。
python:Ver2.~

python

1data = [[[238, 9], [328, 90]], [[238, 9], [328, 90]], [[10, 4], [30, 0]]]

としたとき、最終的に

python

1data = [[[238, 9], [328, 90]], [[10, 4], [30, 0]]]

としたいです。
つまり、重複した配列の[[238, 9], [328, 90]]の部分を消去したいのです。

python

1data = [[0, 0], [1, 1], [1, 0], [1, 1], [0, 1], [0, 0]] 2data = list(map(list, set(map(tuple, data)))) #[[0, 1], [1, 0], [0, 0], [1, 1]]

これを応用できないかと考えているのですが...。皆様のお力をお借りできないでしょうか。

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

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

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

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

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

hayataka2049

2018/06/03 19:28 編集

dataを手元環境にコピペしたらエラーが出ました。正しく貼ってください
TANUKIpro

2018/06/03 19:33

たった今編集しました。申し訳ございません
guest

回答2

0

ベストアンサー

python

1>>> data = [[[238, 9], [328, 90]], [[238, 9], [328, 90]], [[10, 4], [30, 0]], [[238, 9], [328, 90]]] 2>>> def totype(lst, from_type=None, to_type=None): 3... if type(lst) == from_type: 4... return to_type([totype(x, from_type=from_type, to_type=to_type) for x in lst]) 5... else: 6... return lst 7... 8>>> totype(tuple(set(totype(data, from_type=list, to_type=tuple))), from_type=tuple, to_type=list) 9[[[238, 9], [328, 90]], [[10, 4], [30, 0]]]

再帰的な型変換関数を作って書いてみましたが、長い割に安全じゃない可能性があるのでこれはボツかもしれません。

回答2

python

1>>> data = [[[238, 9], [328, 90]], [[238, 9], [328, 90]], [[10, 4], [30, 0]]] 2>>> result = [] 3>>> for x in data: 4... if x not in result: 5... result.append(x) 6... 7>>> result 8[[[238, 9], [328, 90]], [[10, 4], [30, 0]]]

これで良かった。規模が小さくて速度の要求がなければ。

投稿2018/06/03 19:40

編集2018/06/03 19:43
hayataka2049

総合スコア30933

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

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

TANUKIpro

2018/06/03 19:44

回答ありがとうございます。再帰的な型変換関数は生まれて初めて使いました。なかなか難しいですね...。早朝にありがとうございます!
hayataka2049

2018/06/03 19:47 編集

でも再帰の方は書いた私自身なにもメリットを感じないので、使うなら回答2の方にしてください・・・ 回答2の方法の欠点は、inがリストの値比較で線形探索しているので、resultがでかくなると重くなっていくことです
TANUKIpro

2018/06/03 19:47

2個目の回答がとても明快で参考になりました。ありがとう御座います!!
guest

0

力技で list of list を tuple of tuple に変換するやり方です。

python

1data = [[[238, 9], [328, 90]], [[238, 9], [328, 90]], [[10, 4], [30, 0]], [[238, 9], [328, 90]]] 2 3tuple_of_tuple = map(lambda x: tuple(map(tuple, x)), data) 4# [((238, 9), (328, 90)), ((238, 9), (328, 90)), ((10, 4), (30, 0)), ((238, 9), (328, 90))] 5 6distincted_tuple_of_tuple = list(set(tuple_of_tuple)) 7# [((238, 9), (328, 90)), ((10, 4), (30, 0))] 8 9distincted = map(lambda x: list(map(list, x)), distincted_tuple_of_tuple) 10# [[[238, 9], [328, 90]], [[10, 4], [30, 0]]]

投稿2018/06/03 19:29

set0gut1

総合スコア2413

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

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

TANUKIpro

2018/06/03 19:49

回答ありがとうございます。意外と正攻法な気がします...。とても参考になりました。ありがとうございます!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問