[['a','a','b','c'],['a','c','c','d'],['b','e','e','f']]
このようなリストがあるときに、全体で2回以上出てくるやつだけを残したいです。
上の例だとdとfは全体で1回しか出てこないので、その2つだけを消して
[['a','a','b','c'],['a','c','c'],['b','e','e']]
このようにしたいです。
どのようにすればいいでしょうか?
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答3件
0
ベストアンサー
python
1from collections import Counter 2from itertools import chain 3 4 5data = [['a','a','b','c'],['a','c','c','d'],['b','e','e','f']] 6excl = [k for k, v in Counter(chain(*data)).items() if v < 2] 7for L in data: 8 L[:] = [i for i in L if i not in excl] 9 10print(data)
投稿2018/01/19 13:46
総合スコア6142
0
こういうものはいかがでしょう。
python
1import numpy as np 2 3origin = [['a','a','b','c'],['a','c','c','d'],['b','e','e','f']] 4el , c = np.unique(origin,return_counts=True) 5del_list = el[c==1] 6 7result=[] 8 9for i in origin : 10 for j in del_list : 11 if j in i : 12 i.remove(j) 13 result.append(i)
numpyのunique関数を使うことでunique化された要素と要素数を取得して、削除対象リストを作成しました。全体で1回のものは削除ということなのでこれらを使って削除リストを作り、for文のなかで削除しています。listの要素がlistとなっているような場合はremoveが使えないので、for文をネスト化しました。この辺りが工夫できるともっとシンプルにできるのですが・・・
投稿2018/01/19 21:46
総合スコア3376
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/01/19 23:43
0
こんな感じでしょうか。
Python
1from collections import Counter 2 3def flatten_2dim(list_2dim): 4 return [e for row in list_2dim for e in row] 5 6my_list = [ 7 ['a', 'a', 'b', 'c'], 8 ['a', 'c', 'c', 'd'], 9 ['b', 'e', 'e', 'f'] 10] 11counter = Counter(flatten_2dim(my_list)) 12my_list = [ 13 [e for e in row if counter[e] >= 2] for row in my_list 14] 15 16print(my_list) 17"""出力 18[['a', 'a', 'b', 'c'], ['a', 'c', 'c'], ['b', 'e', 'e']] 19"""
思いつくままに書いているので、もっといい方法があるかもしれませんが。
投稿2018/01/19 10:52
編集2018/01/19 10:53総合スコア35660
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。