はじめに
今日も今日とて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) |