一個簡單的方法來做到這一點是使用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 ... –