Вы также можете использовать порядковый номер дня, чтобы упростить его:
def date_range(start_date, end_date):
for ordinal in range(start_date.toordinal(), end_date.toordinal()):
yield datetime.date.fromordinal(ordinal)
Или, как предложено в комментариях, вы можете создать такой список:
date_range = [
datetime.date.fromordinal(ordinal)
for ordinal in range(
start_date.toordinal(),
end_date.toordinal(),
)
]
Последнее, что вы делаете в цикле, это добавление элемента в массив, то есть длина массива всегда будет не меньше 1. Т.е., arr.length > 0
всегда оценивается как true
.
Редактировать : добавление примера, чтобы показать, что происходит. В конце концов, arr.shift()
оценивается как undefined
, когда в массиве ничего не осталось, а затем вы возвращаете undefined
обратно в массив, делая длину массива на 1 элемент длинной. Смотрите вывод консоли ниже.
const arr = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
let i = 0;
while (arr.length > 0 && i < 50) {
arr.shift();
arr.push(arr.shift());
console.log(arr);
i = i + 1;
}