[解決済み] Pythonで日付の範囲を繰り返し処理する
2022-03-20 18:35:24
質問
以下のようなコードでやっていますが、どうしたらもっとうまくできるでしょうか?今のところ、ネストされたループよりはましだと思いますが、リスト内包の中にジェネレータがあると、Perl-one-liner的になってしまいます。
day_count = (end_date - start_date).days + 1
for single_date in [d for d in (start_date + timedelta(n) for n in range(day_count)) if d <= end_date]:
print strftime("%Y-%m-%d", single_date.timetuple())
注意事項
- 実際に印刷に使っているわけではありません。あくまでデモ用です。
-
は、その
start_date
とend_date
変数はdatetime.date
オブジェクトを作成します。(レポートを作成するために使用する予定です)。
サンプル出力
開始日が
2009-05-30
で、終了日が
2009-06-09
:
2009-05-30
2009-05-31
2009-06-01
2009-06-02
2009-06-03
2009-06-04
2009-06-05
2009-06-06
2009-06-07
2009-06-08
2009-06-09
解決方法は?
なぜ2つのネストしたイテレーションがあるのですか?私の場合、1回の繰り返しで同じデータのリストが生成されます。
for single_date in (start_date + timedelta(n) for n in range(day_count)):
print ...
そして、リストは保存されず、1つのジェネレータのみが繰り返し実行されます。また、ジェネレータの中の"if"は不要のようです。
結局のところ、線形シーケンスは2つのイテレータではなく、1つのイテレータで済むはずです。
John Machinと議論した結果、更新しました。
おそらく最もエレガントな解決策は、ジェネレーター関数を使用して、日付の範囲に対する反復を完全に隠蔽/抽象化することです。
from datetime import date, timedelta
def daterange(start_date, end_date):
for n in range(int((end_date - start_date).days)):
yield start_date + timedelta(n)
start_date = date(2013, 1, 1)
end_date = date(2015, 6, 2)
for single_date in daterange(start_date, end_date):
print(single_date.strftime("%Y-%m-%d"))
注意: 組み込みの
range()
関数で、この反復は停止します。
前に
に到達すると
end_date
. したがって、包括的な反復には、次の日を使用します。
range()
.
関連
-
[解決済み】なぜ「LinAlgError: Grangercausalitytestsから「Singular matrix」と表示されるのはなぜですか?
-
[解決済み】Python Error: "ValueError: need more than 1 value to unpack" (バリューエラー:解凍に1つ以上の値が必要です
-
[解決済み] Pythonには文字列の'contains'サブストリングメソッドがありますか?
-
[解決済み] Pythonで現在時刻を取得する方法
-
[解決済み] Python 3で「1000000000000000 in range(1000000000000001)」はなぜ速いのですか?
-
[解決済み] JavaScriptで2つの日付を比較する
-
[解決済み] コレクションを反復処理し、ループ内でオブジェクトを削除する際に ConcurrentModificationException を回避する。
-
[解決済み】ネストされたディレクトリを安全に作成するには?
-
[解決済み】forループを使った辞書の反復処理
-
[解決済み】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 実装 サイバーパンク風ボタン
おすすめ
-
python implement mysql add delete check change サンプルコード
-
任意波形を生成してtxtで保存するためのPython実装
-
[解決済み】なぜ「LinAlgError: Grangercausalitytestsから「Singular matrix」と表示されるのはなぜですか?
-
[解決済み】TypeError: 系列を <class 'float'> に変換することができません。
-
[解決済み】ImportError: bs4という名前のモジュールがない(BeautifulSoup)
-
[解決済み】NameError: 名前 'self' が定義されていません。
-
[解決済み】cアンダースコア式`c_`は、具体的に何をするのですか?
-
[解決済み】 'numpy.float64' オブジェクトは反復可能ではない
-
[解決済み] Pythonで日付の範囲を作成する
-
[解決済み】2つの日付の間にあるすべての日付けを印刷する【重複あり