Wenn bekannt ist, dass eine Python-Liste immer ein einzelnes Element enthält, gibt es eine andere Möglichkeit, darauf zuzugreifen als:
mylist[0]
Sie können fragen: "Warum sollten Sie wollen?". Neugier allein. Es scheint eine alternative Möglichkeit zu geben, alles in Python zu erledigen .
python
python-3.x
python-2.7
list
iterable-unpacking
Pyderman
quelle
quelle
list
nicht der beste Datentyp?mylist[0]
Erfolgreich, wenn Sie mindestens ein Element haben, sich aber nicht beschweren, wenn Sie tatsächlich 30 Elemente hatten.singleitem, = mylist
überprüft, ob Sie genau ein Element haben, nicht mehr und nicht weniger.Antworten:
Sequenz auspacken:
singleitem, = mylist # Identical in behavior (byte code produced is the same), # but arguably more readable since a lone trailing comma could be missed: [singleitem] = mylist
Explizite Verwendung des Iteratorprotokolls:
Destruktiver Pop:
Negativer Index:
singleitem = mylist[-1]
Wird über eine einzelne Iteration festgelegt
for
(da die Schleifenvariable beim Beenden einer Schleife mit ihrem letzten Wert verfügbar bleibt):for singleitem in mylist: break
Viele andere (Kombinieren oder Variieren der oben genannten Teile oder anderweitiges Verlassen auf implizite Iteration), aber Sie haben die Idee.
quelle
singleitem = (lambda x: x)(*mylist)
[singleitem] = mylist
.[]
Entpacken von Sequenzen (machtfor [i, x] in enumerate(iterable):
mich verrückt), aber ja, beim Entpacken eines einzelnen Werts kann das nachfolgende Komma leicht übersehen werden, und die Verwendung von Klammern ist aus Gründen der Lesbarkeit gerechtfertigt. Ich habe es der Antwort hinzugefügt. Vielen Dank!Ich werde hinzufügen, dass die
more_itertools
Bibliothek ein Tool hat, das ein Element von einem iterablen zurückgibt.from more_itertools import one iterable = ["foo"] one(iterable) # "foo"
Darüber hinaus
more_itertools.one
wirft einen Fehler , wenn die iterable leer ist oder mehr als ein Element.iterable = [] one(iterable) # ValueError: not enough values to unpack (expected 1, got 0) iterable = ["foo", "bar"] one(iterable) # ValueError: too many values to unpack (expected 1)
more_itertools
ist ein Paket von Drittanbietern> pip install more-itertools
quelle