LoginSignup
1
2

More than 5 years have passed since last update.

[Python3]リストからユニークな値を除外する

Posted at

はじめに

今日も今日とてcheckioの課題。
paizaの課題(B級)もやりましたが、あまり身になる内容ではなかったのでおかわり。

今日書いたコード

任意の数字のリスト([1,2,3,4,5]のような)から、ユニークな数字を除外する。
(例えば、[1,3,1,3,2]だと2が除外されて[1,3,1,3]になる)

from collections import Counter

def checkio(data):

    ### 変数定義
    delete = []
    counter = Counter(data)
    c_values = list(counter.values())
    c_keys = list(counter.keys())

    ### 1つだった数値を削除リストに追加
    for i in range(len(c_values)):
        if c_values[i] == 1:
            delete.append(c_keys[i])

    ### 削除リスト内の数字を元データから削除
    for x in delete:
        try:
            data.remove(data[data.index(x)])
        except ValueError:
            pass

    return data

今回学んだこと

  • shiracamusさんに教えてもらったCounterを使用(コメント下さりありがとうございました)
  • (今回は使いませんでしたが)enumerateはリストから「値」と「インデックス番号」を取得する
  • 辞書型からkeyまたはvalueのみを抽出したい場合は、それぞれkeys()とvalues()を使う
  • int型を直接for文に渡すとnot iterableエラーが出る(超初歩)

(出力例)

for i in 1:
(中略)
TypeError: 'int' object is not iterable

構文まとめ

メソッド 説明 構文
Counter Counterは指定した要素がリスト内に含まれる数をカウント(結果は辞書型で格納)collectionsをインポートして使用 Counter(List1)
enumerate リストから「値」と「インデックス番号」を取得する enumerate(list1)
keys 辞書型からkeyを抽出してリストにする dict1.keys()
values 辞書型からvalueを抽出してリストにする dict1.values()
isinstance 引数を二つ受け取り、オブジェクトが指定したクラスのインスタンスであるかを確認(一致する場合はTrueを返す) isinstance("word",str)
1
2
5

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2