0

これが私のコードです:私はset()を使用し、[3、14、6]を返します

items = [3, 6, 3, 3, 14]
set(items)
>>> set([3,14,6])

私の質問は、 set 関数が値の出力をどのように整理するかです。これを考えてみると、リストの最初の数字が 3 で 2 番目が 6 である場合、代わりに [3,6,14] を出力する必要がありますか?

4

2 に答える 2

2

セットは順不同です。ドキュメントから:

セットは順序付けされていないコレクションであるため、要素の位置や挿入順序を記録しません。

辞書と同様に、順序は格納されたキーのハッシュに基づいています。安定性を維持するために、この明らかな順序付けに依存することはできません。

基礎となるデータ モデルに関心がある場合、基礎となるデータ構造はHash Tableと呼ばれますが、セットではキーのみが格納され、値は空のままです。

于 2012-11-16T08:29:47.617 に答える
1

@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)
于 2012-11-16T09:01:06.453 に答える