[解決済み] 最初の項目または None を返す Python のイディオム
2022-03-15 05:04:36
質問
もっと簡単な方法があると思うのですが、私には思いつきません。
リストを返すメソッドをたくさん呼び出しています。 そのリストは空かもしれません。 リストが空でない場合は、最初の項目を返し、そうでない場合は None を返したい。 このコードは動作する。
my_list = get_list()
if len(my_list) > 0: return my_list[0]
return None
これを行うための簡単な1行イディオムがあるはずだと思うのですが、どうしても思いつきません。 あるのでしょうか?
編集してください。
ここで一行表現を求めているのは、信じられないほど簡潔なコードが好きだからではなく、このようなコードをたくさん書かなければならないからです。
x = get_first_list()
if x:
# do something with x[0]
# inevitably forget the [0] part, and have a bug to fix
y = get_second_list()
if y:
# do something with y[0]
# inevitably forget the [0] part AGAIN, and have another bug to fix
私がやりたいことは、確かに関数で実現できる(そしておそらくそうなる)。
def first_item(list_or_none):
if list_or_none: return list_or_none[0]
x = first_item(get_first_list())
if x:
# do something with x
y = first_item(get_second_list())
if y:
# do something with y
Pythonの簡単な式でできることによく驚かされるので、簡単な式でできることがあるなら、関数を書くのは馬鹿らしいと思ったので、質問を投稿しました。 しかし、これらの回答を見ていると、どうやら関数は は というシンプルな答えです。
解決方法は?
Python 2.6+
next(iter(your_list), None)
もし
your_list
は
None
:
next(iter(your_list or []), None)
Python 2.4
def get_first(iterable, default=None):
if iterable:
for item in iterable:
return item
return default
例
x = get_first(get_first_list())
if x:
...
y = get_first(get_second_list())
if y:
...
もう一つの方法は、上記の関数をインライン化することです。
for x in get_first_list() or []:
# process x
break # process at most one item
for y in get_second_list() or []:
# process y
break
を回避するために
break
と書けばいい。
for x in yield_first(get_first_list()):
x # process x
for y in yield_first(get_second_list()):
y # process y
どこで
def yield_first(iterable):
for item in iterable or []:
yield item
return
関連
-
ピローによる動的キャプチャ認識のためのPythonサンプルコード
-
[解決済み】TypeErrorを取得しました。エントリを持つ子テーブルの後に親テーブルを追加しようとすると、 __init__() missing 1 required positional argument: 'on_delete'
-
[解決済み] リスト内のアイテムのインデックスを検索する
-
[解決済み] Pythonには文字列の'contains'サブストリングメソッドがありますか?
-
[解決済み] Pythonで現在時刻を取得する方法
-
[解決済み] Pythonで2つのリストを連結する方法は?
-
[解決済み] 最小限の驚き」と「変更可能なデフォルトの引数
-
[解決済み] 最近のPythonでカスタム例外を宣言する適切な方法?
-
[解決済み】ネストされたディレクトリを安全に作成するには?
-
[解決済み】Pythonに三項条件演算子はありますか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
opencvとpillowを用いた顔認証システム(デモあり)
-
ピローによる動的キャプチャ認識のためのPythonサンプルコード
-
Python関数の高度な応用を解説
-
Python 人工知能 人間学習 描画 機械学習モデル作成
-
Python機械学習Githubが8.9Kstarsに達したモデルインタープリタLIME
-
Python入門 openを使ったファイルの読み書きの方法
-
Python 入出力と高次代入の基礎知識
-
FacebookオープンソースワンストップサービスpythonのタイミングツールKats詳細
-
[解決済み】Flaskのテンプレートが見つからない【重複あり
-
[解決済み] リストとタプルの違いは何ですか?