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

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

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

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

Q&A

解決済

4回答

137閲覧

リストの重複を消すこと

退会済みユーザー

退会済みユーザー

総合スコア0

Python 3.x

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

0グッド

0クリップ

投稿2018/06/22 07:07

リストの重複を消すことに関してわからないことがあります。

list1=[["1","2","3",],["a","6","2"],["m","2","3"],["1","5","2"],["c","7","k"]...]
というリストがあった時に、
リストの中のリスト1番目(ここでは順に1,a,m,1...)が一致したら重複とみなして、あとで出た方を消したいです。

出力したい結果は
[["1","2","3",],["a","6","2"],["m","2","3"],,["c","7","k"]...]

ここでは["1","5","2"]が重複とみなされ、消えて欲しいです。

どうすれば良いか教えていただきたいです。
よろしくお願いします。

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

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

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

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

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

LouiS0616

2018/06/22 07:15

『出力したい結果』の順序は保証されている必要がありますか。例えば、出力 [["m","2","3"],["1","2","3",],["a","6","2"],["c","7","k"]...] は許されますか。
退会済みユーザー

退会済みユーザー

2018/06/22 07:18

今回、順序の保証は必要ありません。情報不足で申し訳ありません。
guest

回答4

0

来たるべき眠気に備えて。

python

1list1 = [["1","2","3"], ["a","6","2"], ["m","2","3"], ["1","5","2"], ["c","7","k"]] 2print( [v for i, v in enumerate(list1) if not v[0] in [s[0] for s in list1][:i]] ) 3# [['1', '2', '3'], ['a', '6', '2'], ['m', '2', '3'], ['c', '7', 'k']]

投稿2018/06/22 07:30

fuzzball

総合スコア16731

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

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

fuzzball

2018/06/22 07:31

被り失礼‥。
退会済みユーザー

退会済みユーザー

2018/06/22 07:40

fuzzball様 ありがとうございます!
guest

0

今回、順序の保証は必要ありません。

こんなのはいかがでしょうか。

Python

1from itertools import groupby 2from operator import itemgetter 3 4list1=[ 5 ["1", "2", "3"], ["a", "6", "2"], ["m", "2", "3"], 6 ["1", "5", "2"], ["c", "7", "k"] 7] 8list1.sort(key=itemgetter(0)) 9 10list2 = [next(it) for _, it in groupby(list1, itemgetter(0))] 11print(list2)

実行結果 Wandbox

[['1', '2', '3'], ['a', '6', '2'], ['c', '7', 'k'], ['m', '2', '3']]

Pythonに組み込まれているのが安定ソートであることを暗に利用しています。

投稿2018/06/22 07:23

編集2018/06/22 07:25
LouiS0616

総合スコア35660

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

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

退会済みユーザー

退会済みユーザー

2018/06/22 07:41

LouiS0616様 ありがとうございます!
guest

0

ベストアンサー

素直に書いてみました。

python

1list1=[["1","2","3"], 2 ["a","6","2"], 3 ["m","2","3"], 4 ["1","5","2"], 5 ["c","7","k"]] 6 7result = [] # 結果のlist 8first_elements = set() # 各子リストの最初の要素を入れておくset 9for line in list1: 10 if line[0] not in first_elements: # setの中に子リストの最初の要素が入ってなかったら、 11 result.append(line) # 子リストをresultに追加 12 first_elements.add(line[0]) # setにも子リストの最初の要素を追加しておく 13 else: # elseなら何もしない(else節は省略可 14 pass 15 16print(result) #=> [['1', '2', '3'], ['a', '6', '2'], ['m', '2', '3'], ['c', '7', 'k']]

投稿2018/06/22 07:14

hayataka2049

総合スコア30933

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

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

退会済みユーザー

退会済みユーザー

2018/06/22 07:19

hayataka2049様 わかりやすい説明ありがとうございます!
guest

0

python

1 2l=[ 3 ["1","2","3"], 4 ["a","6","2"], 5 ["m","2","3"], 6 ["1","5","2"], 7 ["c","7","k"] 8] 9 10 11r=list(zip(*l)) 12lr=[i for i, x in enumerate(list(r[0])) if x == l[0][0]] 13del lr[0] 14for i in lr:del l[i] 15 16print(l)

投稿2018/06/22 09:27

編集2018/06/22 10:06
Untitled_Sample

総合スコア192

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問