web-dev-qa-db-ja.com

Pythonの単一要素リストから要素のみを取得しますか?

Pythonリストに常に単一のアイテムが含まれていることがわかっている場合、次の以外にアクセスする方法はありますか?

mylist[0]

「なぜしたいのか?」と尋ねることができます。好奇心だけ。 Pythonにはeverythingを実行する別の方法があるようです。

51
Pyderman

シーケンスの展開:

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

イテレータプロトコルの明示的な使用:

singleitem = next(iter(mylist))

破壊的なポップ:

singleitem = mylist.pop()

負のインデックス:

singleitem = mylist[-1]

単一の反復forを介して設定します(ループが終了したときにループ変数がその最後の値で利用可能なままであるため):

for singleitem in mylist: break

他の多く(上記のビットを組み合わせたり、変更したり、暗黙的な反復に依存している)場合でも、アイデアは得られます。

82
ShadowRanger

more_itertools ライブラリには、反復可能から1つのアイテムを返すツールがあります。

from more_itertools import one


iterable = ["foo"]
one(iterable)
# "foo"

さらに、 more_itertools.one は、反復可能オブジェクトが空であるか、複数のアイテムがある場合にエラーを発生させます。

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)
13
pylang