0

Python のcollectionsモジュールの Counter() は順序付けされていないコンテナーですが、同じサイズの整数からビルドすると、values() ビューは、Counter が最初にキーで並べ替えられたかのように表示されます。これは、私のコンピューター (3.4.3rc1) と、3.5 までのバージョンの Python を使用するオンライン IDE (tio.run、ideone.com) の両方で一貫して発生します。3.6+ または PyPy の場合はそうではありません。

from collections import Counter
import random

def counter_is_sorted(iterable):
    c = Counter(iterable)
    return list(c.values()) == [v for k, v in sorted(c.items())]

print(counter_is_sorted([random.randrange(1000) for _ in range(50000)]))

True

これは、要素が更新された場合は常に true であるとは限らず、他の型や整数サイズが混在している場合は false です。

print(counter_is_sorted([random.randrange(65000, 66000) for _ in range(50000)]))
print(counter_is_sorted([round(random.uniform(0, 10), 2) for _ in range(50000)]))
print(counter_is_sorted([random.choice("abcdefghijklmnopqrstuvwxyz") for _ in range(50000)]))

False
False
False

これは設計によるものですか、それとも特定の要因によるものですか? values() ビューがソートされていると安全に想定できるのは、どのような制約の下ですか?

4

0 に答える 0