比较字符串列表以找出序列中的缺失值

1 投票
2 回答
2613 浏览
提问于 2025-04-18 11:56

我有一个包含一周七天的列表,这个列表可能会包含假期,比如独立日,而不是简单的星期五这样的日子。(我在处理天气数据)我想找个方法,把我的列表和一周的日子进行比较,看看缺少了哪个(或者哪些)。我想出了一个方法,这个方法在我的需求下可以正常工作,只要没有连续两个假期,但我希望能找到一个更好的方法,让它更稳健,并且以后也能重复使用。请问有没有什么标准的库可以用来解决这个问题呢?

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'    

撰写回答