- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
>> week_days_to_string(-6ren">
我得到一个星期几的序列。我想做的 Python 代码:
def week_days_to_string(week_days):
"""
>>> week_days_to_string(('Sunday', 'Monday', 'Tuesday'))
'Sunday to Tuesday'
>>> week_days_to_string(('Monday', 'Wednesday'))
'Monday and Wednesday'
>>> week_days_to_string(('Sunday', 'Wednesday', 'Thursday'))
'Sunday, Wednesday, Thursday'
"""
if len(week_days) == 2:
return '%s and %s' % weekdays
elif week_days_consecutive(week_days):
return '%s to %s' % (week_days[0], week_days[-1])
return ', '.join(week_days)
我只需要 week_days_consecutive
函数(最难的部分)。
我有什么想法可以实现这一目标吗?
澄清:
我的措辞和例子引起了一些困惑。我不仅想将此功能限制在工作周内。我想考虑一周中的所有日子(S、M、T、W、T、F)。很抱歉昨晚没说清楚。编辑了问题的正文以使其更清楚。
编辑:投入一些 Spanner
环绕序列:
>>> week_days_to_string(('Sunday', 'Monday', 'Tuesday', 'Saturday'))
'Saturday to Tuesday'
并且,根据@user470379 和可选:
>>> week_days_to_string(('Monday, 'Wednesday', 'Thursday', 'Friday'))
'Monday, Wednesday to Friday'
最佳答案
我会通过以下方式解决这个问题:
使用 calendar.day_name
、range
和一些用于理解的方法,您可以这样做:
day_indexes = {name:i for i, name in enumerate(calendar.day_name)}
def weekdays_consecutive(days):
indexes = [day_indexes[d] for d in days]
expected = range(indexes[0], indexes[-1] + 1)
return indexes == expected
一些其他选项,具体取决于您的需要:
如果您需要 Python < 2.7,您可以使用:
day_indexes = dict((name, i) for i, name in enumerate(calendar.day_name))
如果您不想允许星期六和星期日,只需剪掉最后两天:
day_indexes = ... calendar.day_name[:-2] ...
如果您需要在周日之后换行,可能最简单的方法是检查每一项是否比前一项多,但要以 7 为模:
def weekdays_consecutive(days):
indexes = [day_indexes[d] for d in days]
return all(indexes[i + 1] % 7 == (indexes[i] + 1) % 7
for i in range(len(indexes) - 1))
更新:对于扩展问题,我仍然会坚持使用他们的 day-to-index dict,但我会:
这是执行此操作的代码:
def weekdays_to_string(days):
# convert days to indexes
day_indexes = {name:i for i, name in enumerate(calendar.day_name)}
indexes = [day_indexes[d] for d in days]
# find the places where sequential days end
ends = [i + 1
for i in range(len(indexes))
if (indexes[(i + 1) % len(indexes)]) % 7 !=
(indexes[(i) % len(indexes)] + 1) % 7]
# wrap the days if necessary to get longest possible sequences
split = ends[-1]
if split != len(days):
days = days[split:] + days[:split]
ends = [len(days) - split + end for end in ends]
# group the days in sequential spans
spans = [days[begin:end] for begin, end in zip([0] + ends, ends)]
# format as requested, with "to", "and", commas, etc.
words = []
for span in spans:
if len(span) < 3:
words.extend(span)
else:
words.append("%s to %s" % (span[0], span[-1]))
if len(days) == 1:
return words[0]
elif len(days) == 2:
return "%s and %s" % tuple(words)
else:
return ", ".join(words)
您也可以尝试以下而不是最后一个 if/elif/else
block 来在最后两个项目之间获得一个“and”并在其他所有项目之间获得逗号:
if len(words) == 1:
return words[0]
else:
return "%s and %s" % (", ".join(words[:-1]), words[-1])
这与规范略有不同,但在我看来更漂亮。
关于Python:将 ('Monday' 、 'Tuesday' 、 'Wednesday' ) 转换为 'Monday to Wednesday',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4482050/
我得到一个星期几的序列。我想做的 Python 代码: def week_days_to_string(week_days): """ >>> week_days_to_string(
我需要让我的 Access 查询始终返回本周的星期一。我在 Google/StackOverflow 上看到了一些解决方案,但它们是用 SQL 编写的,而且我是创建 Access 查询的初学者(我正在
Use Scilab answer the following questions:Paste both your function code, and console output demon
Use Scilab answer the following questions:Paste both your function code, and console output demon
编辑: 当我第一次发布这个问题时,我要求一个公式来解决一个条件,但后来意识到它实际上有两个条件。 给定一个特定的日期: 返回该月的第一个星期一,实际上可能是上个月的最后一个星期一。 (当实际的第一个星
我的输入文本框中有这个日期选择器,它在日期选择器和所选内容中也运行良好。我的问题是想要禁用过去的日期,并且仅禁用 future 选定的日期“星期一”。下面是我的代码 $(function() {
应该像这样的输出: 星期一 当日 天 天 y ÿ 我到目前为止所拥有的: #include using namespace std; int main () { char *weekDays[7]=
我有一个 Oracle SQL 查询,我正在尝试在 MySQL 中重写它。 PS:这里的日期是任意的,在实际场景中,我在 Tableau 中使用此自定义查询,它接受用户定义的日期。“引用开始日期”与“
我想做的是计算上周一的时间戳,但相对于其他日期。假设我给出日期 16-11-2011,我想取回日期 14-11-2011。 有没有办法不用硬编码就可以做到这一点? 最佳答案 使用 strtotime
这个问题已经有答案了: Get the number of weeks between two Dates. (19 个回答) 已关闭 8 年前。 看看你能不能帮我。我想获取两个日期 d1 和 d2
import java.time.LocalDate; import static java.time.DayOfWeek.*; public class Test { public stat
您好,我在让提示显示正确信息时遇到一些问题。现在它显示这个。 这里是一个示例: 我想删除出现在日期之前的短语“从星期一开始的一周”。我尝试更改图表选项中的工具提示对象参数,但没有帮助。这是图表选项现在
我想获取系统语言环境的星期日、星期一、星期二、星期三、星期四、星期五和星期六字符串。我有代码: Calendar cal = Calendar.getInstance(); cal.set(Calen
我想使用 strtotime("last Monday")。 问题是,如果今天是星期一,它会返回什么?它似乎正在返回上周星期一的日期。在这种情况下,我怎样才能让它返回今天的日期? 最佳答案 如果您阅读
我在 React 引导应用程序中使用 Monday.com API。 我可以使用项目名称成功创建一个新的看板项目... monday.api( `mutation { crea
我正在为 MS Excel 2007 新学习 VBA。我写了一个简单的循环来填补一周中缺失的几天,如下所示。因此,对于每一对连续的日子重复相同的行,只是更改了日期的名称(我在这里省略了除了两个之外的所
在 PostgreSQL 数据库中,我有一个表付款,其中的列 payment_date 类型为时间戳。我的目标是计算周一支付的款项。以下查询: SELECT TO_CHAR(payment_date,
echo date('Y-m-d', strtotime('First Monday '.date('F o', strtotime("-4 months"))); 以上代码返回 2012-10-08
echo date('Y-m-d', strtotime('First Monday '.date('F o', strtotime("-4 months"))); 以上代码返回 2012-10-08
我正在使用 Axios 将数据从 React 应用程序发布到 Monday API。 您可以在此处找到周一的开发页面: https://developers.monday.com/#!/boards/
我是一名优秀的程序员,十分优秀!