比较字符串列表以找出序列中的缺失值
我有一个包含一周七天的列表,这个列表可能会包含假期,比如独立日,而不是简单的星期五这样的日子。(我在处理天气数据)我想找个方法,把我的列表和一周的日子进行比较,看看缺少了哪个(或者哪些)。我想出了一个方法,这个方法在我的需求下可以正常工作,只要没有连续两个假期,但我希望能找到一个更好的方法,让它更稳健,并且以后也能重复使用。请问有没有什么标准的库可以用来解决这个问题呢?
daysOfTheWeek = ["sunday", "monday", "tuesday", "wednesday", "thursday", "friday", "saturday"]
days = ["NOTADAY", "saturday", "NOTADAY", "monday"]
repaired = []
for i, day in enumerate(days):
try:
dayIndex = daysOfTheWeek.index(day.lower())
except ValueError:
try:
next = indices[i+1]
dayIndex = next-1
except IndexError:
dayIndex = 6
if dayIndex > 6:
dayIndex = 0
repaired.append(daysOfTheWeek[dayIndex])
for r in repaired:
print r.capitalize()
2 个回答
0
在Python中,一般的做法是使用集合。
set(daysOfTheWeek).difference(set(days))
这将返回以下集合:
In [3]: set(daysOfTheWeek).difference(set(days))
Out[3]: {'friday', 'sunday', 'thursday', 'tuesday', 'wednesday'}
可以把一组可以被“哈希”的对象转换成一个集合。比如字符串、元组和整数都是可以被“哈希”的。
1
假设你想在 days
这个字符串中找到至少一个和 daysOfTheWeek
这个循环模式相匹配的字符串,这样模式就会变成:
days = ["NOTADAY", "sunday", "NOTADAY", "NOTADAY", "NOTADAY", "NOTADAY"]
变成这样:
['Saturday', 'Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday']
这个方法是有效的:
if any(day in daysOfTheWeek for day in days):
for i, day in enumerate(days):
if day in daysOfTheWeek:
j=daysOfTheWeek.index(day)
repaired=[daysOfTheWeek[k % len(daysOfTheWeek)].capitalize()
for k in range(j-i, j+len(days)-i)]
print days
print repaired
break
else:
print 'cannot be repaired'