Help us understand the problem. What is going on with this article?

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

More than 1 year has passed since last update.

はじめに

今日も今日とて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)
Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away