Python
listOperation
#migrated
CheckIO

CheckIO (Python) > Non-unique Elements > 実装してみた

https://py.checkio.org/mission/non-unique-elements/

リストの中からuniqueでない要素を取り除く処理。
例として、[1, 2, 3, 1, 3]に対して[1, 3, 1, 3]を返す。

v0.1

以下で全assertionをパスしたが、記述が煩雑だ。

from collections import Counter

def checkio(data):
    print(list(data))

    counter = Counter(data)
    pickups = []
    for num, cnt in counter.most_common():
        if cnt > 1:
            pickups.append(num)

    reslist = []
    for elem in data:
        for flt in pickups:
            if elem is flt:
                reslist.append(elem)

    #print(list(reslist))
    return reslist

#Some hints
#You can use list.count(element) method for counting.
#Create new list with non-unique elements
#Loop over original list


if __name__ == "__main__":
    #These "asserts" using only for self-checking and not necessary for auto-testing
    assert list(checkio([1, 2, 3, 1, 3])) == [1, 3, 1, 3], "1st example"
    assert list(checkio([1, 2, 3, 4, 5])) == [], "2nd example"
    assert list(checkio([5, 5, 5, 5, 5])) == [5, 5, 5, 5, 5], "3rd example"
    assert list(checkio([10, 9, 10, 10, 9, 8])) == [10, 9, 10, 10, 9], "4th example"
    print("It is all good. Let's check it now")

suggestionを見てもlist.append()を使うようにとのことなので、あまり改善策は思いつかない。

v0.2

足すのをやめて取り除くことにした。

from collections import Counter

def checkio(data):
    print(list(data))

    counter = Counter(data)
    removes = []
    for num, cnt in counter.most_common():
        if cnt == 1:
            removes.append(num)

    for elem in removes:
        data.remove(elem)

    #print(list(reslist))
    return data

#Some hints
#You can use list.count(element) method for counting.
#Create new list with non-unique elements
#Loop over original list


if __name__ == "__main__":
    #These "asserts" using only for self-checking and not necessary for auto-testing
    assert list(checkio([1, 2, 3, 1, 3])) == [1, 3, 1, 3], "1st example"
    assert list(checkio([1, 2, 3, 4, 5])) == [], "2nd example"
    assert list(checkio([5, 5, 5, 5, 5])) == [5, 5, 5, 5, 5], "3rd example"
    assert list(checkio([10, 9, 10, 10, 9, 8])) == [10, 9, 10, 10, 9], "4th example"
    print("It is all good. Let's check it now")