[解決済み] 'for'ループの最後の要素を検出するpythonic方法は何ですか?
2022-04-01 17:05:52
質問
forループの最後の要素に対して特別な処理を行うための最良の方法(よりコンパクトで"pythonic"な方法)を知りたいのですが、どうすればよいでしょうか?以下のコードだけが呼び出されます。 の間に 要素では抑制されます。
現在、私が行っている方法は以下の通りです。
for i, data in enumerate(data_list):
code_that_is_done_for_every_element
if i != len(data_list) - 1:
code_that_is_done_between_elements
何か良い方法はないでしょうか?
注)このようなハッキングで作るのではなく
reduce
.
;)
解決方法は?
を作る方が簡単(安上がり)な場合がほとんどです。 最初 の繰り返しを特別なケースとして扱います。
first = True
for data in data_list:
if first:
first = False
else:
between_items()
item()
これはどのような反復記号に対しても有効であり、たとえそれが
len()
:
file = open('/path/to/file')
for line in file:
process_line(line)
# No way of telling if this is the last line!
それはさておき、何をしようとしているかによるので、一概に優れた解決策はないと思います。例えば、リストから文字列を生成するのであれば、当然ながら
str.join()
を使うよりも
for
ループを「特殊なケースで」使用します。
同じ原理で、よりコンパクトに。
for i, line in enumerate(data_list):
if i > 0:
between_items()
item()
見覚えありますよね :)
を使わない反復処理可能なオブジェクトの現在の値を調べる必要がある、@ofko やその他の人のために。
len()
が最後の1つである場合、先を見る必要があります。
def lookahead(iterable):
"""Pass through all values from the given iterable, augmented by the
information if there are more values to come after the current one
(True), or if it is the last value (False).
"""
# Get an iterator and pull the first value.
it = iter(iterable)
last = next(it)
# Run the iterator to exhaustion (starting from the second value).
for val in it:
# Report the *previous* value (more to come).
yield last, True
last = val
# Report the last value.
yield last, False
すると、こんな風に使うことができます。
>>> for i, has_more in lookahead(range(3)):
... print(i, has_more)
0 True
1 True
2 False
関連
-
[解決済み] ステートメント: %%i '現時点では予期しない' を表す一行。
-
[解決済み] for'ループでインデックスにアクセスする?
-
[解決済み] Pythonのリストメソッドであるappendとextendの違いは何ですか?
-
[解決済み] __init__.py は何のためにあるのですか?
-
[解決済み] パラメータに**(ダブルスター/アスタリスク)、*(スター/アスタリスク)がありますが、これはどういう意味ですか?
-
[解決済み] リストの最後の要素を取得する方法
-
[解決済み] 複数行の長い文字列を作成するためのPythonicな方法
-
[解決済み] Pythonで型をチェックする標準的な方法は何ですか?
-
[解決済み】__str__と__repr__の違いは何ですか?
-
[解決済み] 'for'ループの最後の要素を検出するpythonic方法は何ですか?
最新
-
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 実装 サイバーパンク風ボタン