Pythonリストに常に単一のアイテムが含まれていることがわかっている場合、次の以外にアクセスする方法はありますか?
mylist[0]
「なぜしたいのか?」と尋ねることができます。好奇心だけ。 Pythonにはeverythingを実行する別の方法があるようです。
シーケンスの展開:
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
他の多く(上記のビットを組み合わせたり、変更したり、暗黙的な反復に依存している)場合でも、アイデアは得られます。
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)