これが私のコードです:私はset()を使用し、[3、14、6]を返します
items = [3, 6, 3, 3, 14]
set(items)
>>> set([3,14,6])
私の質問は、 set 関数が値の出力をどのように整理するかです。これを考えてみると、リストの最初の数字が 3 で 2 番目が 6 である場合、代わりに [3,6,14] を出力する必要がありますか?
セットは順不同です。ドキュメントから:
セットは順序付けされていないコレクションであるため、要素の位置や挿入順序を記録しません。
辞書と同様に、順序は格納されたキーのハッシュに基づいています。安定性を維持するために、この明らかな順序付けに依存することはできません。
基礎となるデータ モデルに関心がある場合、基礎となるデータ構造はHash Tableと呼ばれますが、セットではキーのみが格納され、値は空のままです。
@Martijn が理由を教えてくれましたが、役に立つかもしれないいくつかのビットがあります。
値をキーとして使用しdict
、元のリストの位置を値として使用できます。
d = dict( (val, idx) for idx, val in enumerate(items) )
# or {val:idx for idx, val in enumerate(items)} in 2.7+
print d.keys() # unique values: [3, 14, 6]
print sorted(d) # unique values in order [3, 6, 14]
print sorted(d, key=d.get) # unique values in original order (based on last occurence of key [6, 3, 14]
そして、最初の出現に基づいて、元の順序を取得するためにもう少し作業が必要です。
d = {}
for idx, val in enumerate(items):
d.setdefault(val, idx)