alternative solution without using collection

alternative solution without using collection – StackOverflow

例えば,こんな感じだろうか.

a = [13,12,11,13,14,13,7,11,13,14,12,14,14]
_max = a.count(max(a, key=a.count))
_min = a.count(min(a, key=a.count))

max_count = []
min_count = []
for x in set(a):
    if a.count(x) == _max:
        max_count.append(x)
    elif a.count(x) == _min:
        min_count.append(x)
res = [min_count, max_count]

[[7],[13,14]]

でも,パフォーマンスを考えれば,

from collections import Counter
from collections import defaultdict

a = [13,12,11,13,14,13,7,11,13,14,12,14,14]
c = Counter(a)
dd = defaultdict(list)
for k, v in c.items():
    dd[v].append(k)
res = [dd[min(c.values())], dd[max(c.values())]]

[[7],[13,14]]

%%timeit
_max = a.count(max(a, key=a.count))
_min = a.count(min(a, key=a.count))

max_count = []
min_count = []
for x in set(a):
    if a.count(x) == _max:
        max_count.append(x)
    elif a.count(x) == _min:
        min_count.append(x)
res = [min_count, max_count]

21.4 µs ± 2.17 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)

%%timeit
c = Counter(a)
dd = defaultdict(list)
for k, v in c.items():
    dd[v].append(k)
res = [dd[min(c.values())], dd[max(c.values())]]

14 µs ± 394 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)

広告
カテゴリー: 未分類 パーマリンク

alternative solution without using collection への2件のフィードバック

  1. ピンバック: how to compare values inside list in python? | 粉末@それは風のように (日記)

  2. ピンバック: 2つのリストから辞書を作る | 粉末@それは風のように (日記)

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中