Python3 – forループの最初と最後だけ処理を変えたい

やりたいこと

たとえば多数の計算結果を表示するとき、リストなら最初だけ"["がついて、各要素の後ろに", "が付加されて、最後の要素だけそのカンマがなくて"]"が表示される。このような処理をいろいろな形で実装したいというような場合。

単純に考えると次のように格好が悪い。

これを、<0, 1, 2, 3, 4>のように末尾だけ表示方法を変えたい、さらには、何個かごとに改行させて、2行目以降の行頭を1行目と変更したいときの処理を考える。

インデックスを利用する方法

1行で表示する場合

以下の例では、enumerateでコレクションのインデックスを取り出して、その値によって処理を分けている。行頭"<"の処理はforループの前でやってもよいが、次の複数行表示の準備としてif文で判定している。

複数行に分けて表示する場合

長いリストや多次元の配列などを複数行に分けて表示したい場合、行ごとの行末文字も変わってくる。そのような処理をforループで書いてみた。

ジェネレーターを使う方法

ジェネレーターを使った方法。このジェネレーターは、各要素のprefix、本体要素、suffixの3つを返す。

1文字目だけ処理を変えるため、コレクションをイテレーターとし、ループに入る前に最初の要素を取り出している。next()関数でイテレーターの内容を取り出すと、その後のforループでは以降の要素が順次取り出されることを利用している。

prefixは最初だけ"<"を使い、その後は""としてprefixなしとして扱っている。

1行で表示する場合

複数行に分けて表示する場合

複数行に分ける場合、1行当たりの要素数を設定し、カウンターで要素位置を検出している。カウンターの値から先頭要素と判定した場合にprefixを" "とし、その他の場合は""としている。

 

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です