[解決済み] リストのすべての要素が条件に一致するかどうかを確認するには?
質問
2万件ほどのリストから構成されるリストがあります。各リストの3番目の要素をフラグとして使用しています。私は、少なくとも1つの要素のフラグが0である限り、このリスト上でいくつかの操作を行いたい、それはのようなものです。
my_list = [["a", "b", 0], ["c", "d", 0], ["e", "f", 0], .....]
最初はフラグがすべて0なので、whileループを使って、少なくとも1つの要素のフラグが0であるかどうかをチェックしています。
def check(list_):
for item in list_:
if item[2] == 0:
return True
return False
もし
check(my_list)
が返されます。
True
そして、私は自分のリストに取り組み続けます。
while check(my_list):
for item in my_list:
if condition:
item[2] = 1
else:
do_sth()
実は、my_listの要素を繰り返しながら削除したかったのですが、繰り返しながら項目を削除することはできません。
オリジナルのmy_listにはフラグがなかった。
my_list = [["a", "b"], ["c", "d"], ["e", "f"], .....]
繰り返しながら要素を削除することができないので、このようなフラグを考案したのです。しかし
my_list
には多くの項目が含まれており
while
ループは
for
をループさせ、多くの時間を消費しています。何かいい方法はないでしょうか?
どのように解決するのですか?
ここでのベストアンサーは
all()
これは、この状況に対応する組み込み関数です。これを
ジェネレータ式
を使えば、欲しい結果をきれいに効率よく出すことができます。例えば
>>> items = [[1, 2, 0], [1, 2, 0], [1, 2, 0]]
>>> all(flag == 0 for (_, _, flag) in items)
True
>>> items = [[1, 2, 0], [1, 2, 1], [1, 2, 0]]
>>> all(flag == 0 for (_, _, flag) in items)
False
なお
all(flag == 0 for (_, _, flag) in items)
とは直接的に等価である。
all(item[2] == 0 for item in items)
この場合、少し読みやすくなるだけです。
そして、フィルタの例では、リスト内包(もちろん、適宜、ジェネレータ式も使えます)。
>>> [x for x in items if x[2] == 0]
[[1, 2, 0], [1, 2, 0]]
少なくとも1つの要素が0であることを確認したい場合、より良い選択肢は
any()
の方が読みやすいと思います。
>>> any(flag == 0 for (_, _, flag) in items)
True
関連
-
Pythonショートビデオクローラーチュートリアル
-
[解決済み】cアンダースコア式`c_`は、具体的に何をするのですか?
-
[解決済み] リストのリストからフラットなリストを作るには?
-
[解決済み] リストが空かどうかを確認するにはどうすればよいですか?
-
[解決済み] 割り当て後にリストが予期せず変更されました。その理由と防止策を教えてください。
-
[解決済み] リストを均等な大きさの塊に分割するには?
-
[解決済み] リストの最後の要素を取得する方法
-
[解決済み] 辞書のリストを辞書の値でソートするにはどうしたらいいですか?
-
[解決済み] リストの要素数を取得する方法
-
[解決済み] リストからランダムに項目を選択するにはどうすればよいですか?
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
python string splicing.join()とsplitting.split()の説明
-
Python interpreted model libraryによる機械学習モデル出力の可視化 Shap
-
[解決済み】ImportError: sklearn.cross_validation という名前のモジュールがない。
-
[解決済み】pygame.error: ビデオシステムが初期化されていない
-
[解決済み】OSError: [WinError 193] %1 は有効な Win32 アプリケーションではありません。
-
[解決済み】socket.error: [Errno 48] アドレスはすでに使用中です。
-
[解決済み】終了コード -1073741515 (0xC0000135)でプロセス終了)
-
[解決済み】TypeErrorを取得しました。エントリを持つ子テーブルの後に親テーブルを追加しようとすると、 __init__() missing 1 required positional argument: 'on_delete'
-
[解決済み】Python - "ValueError: not enough values to unpack (expected 2, got 1)" の修正方法 [閉店].
-
[解決済み】Flaskのテンプレートが見つからない【重複あり