python; checkio日記

checkioを中心にpythonプログラミングの記録

Home 問題2

問題: 数字の入ったリストから、重複がないもののみを消す。
[1,2,3,4,5,6,4,2,5] => [2,4,5,4,2,5] #1,3,6が消去

from collections import Counter
import numpy as np
def checkio(data):
    count = Counter(data)
    [x for (x, y) in count.items() if y == 1]
    erase = [x for (x, y) in count.items() if y == 1]
    return [i for i in data if sum(np.array(erase)==i)==0]

まず、一つしかない数字をリストにして、それをarrayにしてから、ループでそのリストに含まれないものをり出すという方法。
これは冗長で、下記のようにすっきりかけた

def checkio(data):
    count = Counter(data)
    return [i for i in data if count[i] >1]

更に、list.count(x)という関数を使うと、リストの中身にxが何個あるかを計測してくれるようなので、

def checkio(data):
    return [i for i in data if data.count(i)>1]

ともっと短くかけるのでした。