782 Stimmen

Gibt es in Python eine geordnete Menge?

Python hat eine geordnetes Wörterbuch . Wie wäre es mit einem geordneten Satz?

26 Stimmen

Was ist mit dem Converse, einer Tasche voller Dinge? (ungeordnet und nicht einmalig)

28 Stimmen

@wim collections.Counter ist die Tasche von Python.

4 Stimmen

Was passiert, wenn etwas zweimal hinzugefügt wird? Wie sollte die Position lauten?

5voto

David Ehrmann Punkte 7006

Wie andere gesagt haben, OrderedDict ist eine Obermenge einer geordneten Menge in Bezug auf die Funktionalität, aber wenn Sie eine Menge für die Interaktion mit einer API benötigen und まさか müssen sie veränderbar sein, OrderedDict.keys() ist eigentlich eine Implementierung abc.collections.Set :

import random
from collections import OrderedDict, abc

a = list(range(0, 100))
random.shuffle(a)

# True
a == list(OrderedDict((i, 0) for i in a).keys())

# True
isinstance(OrderedDict().keys(), abc.Set)   

Die Nachteile sind die Unveränderlichkeit und die Notwendigkeit, das Set wie ein Diktat aufzubauen, aber es ist einfach und verwendet nur Built-ins.

2voto

RichardB Punkte 94

El ParallelRegression Paket bietet eine setList( ) geordnete Set-Klasse, die methodisch kompletter ist als die auf dem ActiveState-Rezept basierenden Optionen. Sie unterstützt alle für Listen verfügbaren Methoden und die meisten, wenn nicht sogar alle für Sets verfügbaren Methoden.

1voto

Hinweis: eine Erweiterung der jrc-Antwort, da die Verwendung von OrderDict nicht in dieser Antwort enthalten ist.

Eine schöne Erklärung mit passendem Beispiel finden Sie unter OrderedSet in Python 3.7 und früher erstellen

Hierfür gibt es zwei Möglichkeiten - (1) collections.OrderedDict und (2) dict

First wird für Python vor 3.7 verwendet und later für Python 3.7 und höher.

Erstellen Sie eine geordnete Menge in Python 3.7 und höher wie unten gezeigt -

keywords = ['hello', 'aurav', 'hello', 'narendra', 'foo', 'foo']
sampleList = list(dict.fromkeys(keywords))

print(type(sampleList))

for item in sampleList:
    print(item)

Wenn das obige Programm ausgeführt wird, lautet die Ausgabe -

<class 'list'>
hello
aurav
narendra
foo

Prüfen Sie, wie Sie OrderedSet mit OrderDict aus Sammlungen erstellen

0voto

Watchdog101 Punkte 550

Es gibt eine Pip-Bibliothek das dies tut:

pip install ordered-set

Dann können Sie es verwenden:

from ordered_set import OrderedSet

-2voto

Loïc N. Punkte 313

Ich hatte also auch eine kleine Liste, in der ich eindeutig die Möglichkeit hatte, nicht eindeutige Werte einzuführen.

Ich habe nach dem Vorhandensein einer eindeutigen Liste gesucht, aber dann festgestellt, dass das Testen des Vorhandenseins des Elements vor dem Hinzufügen gut funktioniert.

if(not new_element in my_list):
    my_list.append(new_element)

Ich weiß nicht, ob es bei diesem einfachen Ansatz Vorbehalte gibt, aber mein Problem ist damit gelöst.

2 Stimmen

Das Hauptproblem bei diesem Ansatz ist, dass das Hinzufügen in O(n) abläuft. Das bedeutet, dass es bei großen Listen langsamer wird. Pythons eingebaute Sets sind sehr gut darin, das Hinzufügen von Elementen zu beschleunigen. Aber für einfache Anwendungsfälle funktioniert es auf jeden Fall!

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X