一个简单的方法来做到这一点是使用days_order
清单一式两份,然后切片该列表分两步进行。
days_order = ['Mo', 'Di', 'Mi', 'Do', 'Fr', 'Sa', 'So']
days_dict = {
'Mo' : 'Montag',
'Di' : 'Dienstag',
'Mi' : 'Mittwoch',
'Do' : 'Donnerstag',
'Fr' : 'Freitag',
'Sa' : 'Samstag',
'So' : 'Sonntag',
}
def daylist(days):
first, last = days.split('-')
days = days_order * 2
i = days.index(first)
days = days[i:]
i = days.index(last)
days = days[:i+1]
return [days_dict[s] for s in days]
s = "Mo-Fr"
print s, daylist(s)
s = "Fr-Mo"
print s, daylist(s)
输出
Mo-Fr ['Montag', 'Dienstag', 'Mittwoch', 'Donnerstag', 'Freitag']
Fr-Mo ['Freitag', 'Samstag', 'Sonntag', 'Montag']
上面的代码只是返回单个日子,如果两个给定的项是相同的。如果在这种情况下需要完整的周期,那么可以使用ekhumoro的算法。
这里是我的版本:
days_order = ['Mo', 'Di', 'Mi', 'Do', 'Fr', 'Sa', 'So']
days_dict = {
'Mo' : 'Montag',
'Di' : 'Dienstag',
'Mi' : 'Mittwoch',
'Do' : 'Donnerstag',
'Fr' : 'Freitag',
'Sa' : 'Samstag',
'So' : 'Sonntag',
}
def daylist(days):
first, last = days.split('-')
days = days_order * 2
i = days.index(first)
j = days.index(last, i + 1)
return [days_dict[s] for s in days[i:j+1]]
s = "Mo-Fr"
print s, daylist(s)
s = "Fr-Mo"
print s, daylist(s)
s = "Di-Di"
print s, daylist(s)
s = "Do-Mi"
print s, daylist(s)
输出
Mo-Fr ['Montag', 'Dienstag', 'Mittwoch', 'Donnerstag', 'Freitag']
Fr-Mo ['Freitag', 'Samstag', 'Sonntag', 'Montag']
Di-Di ['Dienstag', 'Mittwoch', 'Donnerstag', 'Freitag', 'Samstag', 'Sonntag', 'Montag', 'Dienstag']
Do-Mi ['Donnerstag', 'Freitag', 'Samstag', 'Sonntag', 'Montag', 'Dienstag', 'Mittwoch']
下面是使用模块化运算的另一种方法,这一次,在由大卫柠檬评论建议:
days_short = ['Mo', 'Di', 'Mi', 'Do', 'Fr', 'Sa', 'So']
days_long = [
'Montag', 'Dienstag', 'Mittwoch', 'Donnerstag',
'Freitag', 'Samstag', 'Sonntag'
]
def daylist(days):
first, last = days.split('-')
i = days_short.index(first)
j = days_short.index(last)
if j <= i:
j += 7
return [days_long[k % 7] for k in range(i, j+1)]
s = "Mo-Fr"
print s, daylist(s)
s = "Fr-Mo"
print s, daylist(s)
s = "Di-Di"
print s, daylist(s)
s = "Do-Mi"
print s, daylist(s)
这可能是其中好醇”老式while循环是最清洁溶液中的场合。 – Obversity
您可以将日期顺序存储为0-6整数,然后您可以比较并重新排序。 – cafebabe1991
使用模块运算符获得约束为0-6的安全性。 i的范围代码(10):print i%7为范围(10)中的i生成:print i%7产生此输出0 1 2 3 4 5 6 0 1 2 3 ... –